V             !"#$%&'()*+,- . / 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 XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@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#{#|#}#~####################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%      !"#$%&'()*+,-./0123456789:;<=>?@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.{.|.}.~.......................................////////////////////0001111111111111111111122222222222222222222234444444444444444455666666 6 6 6 6 66666666666 !"#$%&'()*+,-./0123456778797:8;8<8=8>8?8@8A8B8C8D8E8F8G8H8I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t;u;v;w;x<y<z<{<|<}<~<<<<<<==============>>>>>>>>??????????????????????????????????????????????????????????@@@@@@AAAAAAAAAAAAAAAAAAAAAAABCCCCCCCCCCCCDDEEEEEFFFF F F F F FFGGGGGGGGGGGGGHIJJ K!K"K#K$K%K&K'K(L)L*L+L,L-L.L/L0L1L2L3L4L5M6N7N8N9N:N;N<N=N>N?N@NANBNCNDNENFNGNHNINJNKNLNMNNNOOPOQORPSPTPUQVRWRXRYRZR[R\R]R^R_R`RaRbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStTuTvTwTxTyTzT{U|U}V~WWWWWWWXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYZZZZZZZ[[[[[[[[\]]]]]]]]]]^^^^^^^^^_````````````````abcdefghijklmnopqrrrrrstuvwxxxxxxxxxxxxxxyyyyyyyy y z z z zzzzzzzz{{{{{{{{{{{ {!{"{#{${%{&{'{({){*{+{,{-{.{/{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~{~|}~ Safe-Inferred$Triples: (shorthand, name, unicode)       None;Transform a scanner into a scanner that also adds opening,  closing and next tokens to indicate layout. portable experimentalyi-devel@googlegroups.com Safe-Inferred  Safe-Inferred  Safe-Inferred      Safe-Inferred Parser process !Parser specification KCompute the combination of two profiles, as well as which one is the best. =Right-eval a fully defined process (ie. one that has no Sus) Intelligent, caching best. MPush a chunk of symbols or eof in the process. This forces some suspensions. Push some symbols.  Push eof Make a parser into a process. BRun 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. V!"#  $   %& '()!"#$%&'()*+,!"#$%& '()#$0 !    $  #"%& '()!"#$%&'()*+,None*+,!"#$%&'()*+,)%&('*+!$#",*+,  Safe-InferredKSMap an Event to a Char. This is used in the emacs keymap for Ctrl-Q and vim keymap insertSpecialChar %-./0123456789:;<=>?@ABCDEFGHIJK-./012-./0123456789:;<=>?@ABCDEFGHIJK-.J/CBA@?>=<;:9876543210DIHGFEK -./CBA@?>=<;:9876543210DIHGFEJK-./012 NoneO/Convert a Yi Attr into a Vty attribute change. LMNOLMNOOLMNLMNO None PQRSTUVW345PQRSTUVWTPQRSUVWPQRSTUVW345portable experimentalyi-devel@googlegroups.comNone_DFinish an atomic command, for the purpose of killring accumulation. `Put some text in the killring.  It'1s accumulated if the last command was a kill too 6Push a string in the killring. aDSet the top of the killring. Never accumulate the previous content. bGet the top of the killring. X7Y8Z9:;[\]<^_`6ab= XYZ[\]^_`ab XYZYZ\[_`ab^]X7Y8Z9:;[\]<^_`6ab=portable experimentalyi-devel@googlegroups.comNonecFSet the file to which debugging output should be written. Though this  is called initDebug. D 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. d?Outputs the given string before returning the second argument. iTraces x and returns y. jLike traceM, but returns (). >cdefgh?ijcdefghijcdijfghe >cdefgh?ij Safe-Inferred@LSubtraction, but treat maxBound as infinity. i.e. maxBound -? x == maxBound A@BCABCA@BC Safe-InferredDSExecute IO (Maybe a) action replacing all exceptions with return value of Nothing. E=Execute IO () action, replacing all exceptions with messages F=Execute IO () action, replacing all exceptions with messages DEFDEFDEFportable experimentalyi-devel@googlegroups.com Safe-InferredGRemoves /./ // and /../ sequences from path,  doesn't follow symlinks H.Returns absolute name of the file, which doesn' t contain  any /./, /../, // sequences or symlinks I*Dereferences symbolic links until regular  file directorysomething_else appears JMake a path absolute. K-Combines two paths, moves up one level on .. L)Splits path into parts by path separator Text version would look like  M (not . T.null) . T.split (N pathSeparators)But we should move to system-filepath package anyway. GHIJKOLGHOGHIJKOL Safe-InferredP"Canonicalize a user-friendly path QXTurn a user-friendly path into a computer-friendly path by expanding the leading tilda. R"Is a user-friendly path absolute? PQRPQRPQR Safe-Inferred%kA '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. lSame as lm, but with all s od. See  for an example of its use. n.Things with orientations which can be flipped pA general bounding box SFixed number of "main"4 windows on the left; stack of windows on the right TTransposed version of U USTall windows, with arranged in a balanced binary tree with sliders in between them VDWide windows (windows placed on top of one another, equally spaced) W@Tall windows (i.e. places windows side-by-side, equally spaced) vExistential wrapper for  x5The type of layout managers. See the layout managers ,  and # for some example implementations. y>Given the old layout and the new list of windows, construct a % layout for the new list of windows. OIf the layout manager uses sliding dividers, then a user will expect that most  of these dividers don'2t move when adding a new window. It is the layout  manager'Bs responsibility to ensure that this is the case, and this is the  purpose of the Layout a argument. pThe old layout may come from a different layout manager, in which case the layout manager is free to ignore it. z5Describe the layout in a form suitable for the user. {<Cycles to the next variant, if there is one (the default is X) |@Cycles to the previous variant, if there is one (the default is X }Relative sizes, for  ~%Divider position, in the range (0,1) Divider reference Orientations for  and  4UI-agnostic layout schema. The basic constructs are  (horizontal/2vertical) stacks with fixed ratios between window  sizes; and (horizontal/-vertical) pairs with a slider in between (if  available).  Initial position of the divider 9Index of the divider (for updating the divider position) Upper of of the pair Lower of the pair  Orientation  Orientation )The layout stack, with the given weights # TODO: fix strictness for stack (it's still lazy) Accessor for the ~ with given reference YTrue if the internal layout managers have the same type (but are not necessarily equal). -Windows placed side-by-side, equally spaced. 5Windows placed on top of one another, equally spaced OTall windows, arranged in a balanced binary tree with sliders in between them. Transposed version of  n5 windows on the left; stack of windows on the right. Transposed version of . Special case of  with all } s equal. YThe default layout is  tallLayout Z+The def layout consists of a single window Mk[lmnopqrstu\]S^T_U`VaWbvwxyz{|}~cdefghijklmYnoZp0klmnopqrstuvwxyz{|}~1~}xyz{|vwpqrstunolmk/k[lmnopqrstu\]S^T_U`VaWbvwxyz{|}~ cdefghijklmYnoZp Safe-Inferred qrstuvwxyz{|}rxyz{|} qrstuvwxyz{|} Safe-Inferred'Combination of the Control.Monad.State ~ and  ORerun the monad until the boolean result is false, collecting list of results. NoneMRun a command using the system shell, returning stdout, stderr and exit code  portable experimentalyi-devel@googlegroups.com Safe-Inferred$Abstraction of the automaton state. (Operational representation of a process  Interactive process description -Abstraction of monadic interactive processes Outputs a result. )Consumes and returns the next character. A Fails if there is no input left, or outside the given bounds.  Just like '(<||)' but in prefix form. It s the  second argument. $Convert 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. :Parses 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#portable experimentalyi-devel@googlegroups.comNone A window onto a buffer. regular or mini window?  the buffer this window opens to 5list 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) &view 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. 2 Scrolling depends on the actual number of buffer 4 lines displayed. Line wrapping changes that number ! relative to the height so we can't use height for that  purpose. 9The 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+A tab, containing a collection of windows. For UI sync; fixes #304 Visible windows ;Current layout. Invariant: must be the layout generated by , up to changing the s. 7layout manager (for regenerating the layout when we add/remove windows) AReturns a list of all mini windows associated with the given tab Accessor 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. jAccessor 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 windows Make a tab from one window Equality on tab identity (the ) portable experimentalyi-devel@googlegroups.comNone !Helper that shows then packs the Text, for all those cases  where we use . @This is kind of like the default Show instance for lists except  over 5. It does not leave the elements in extra quotes and  should not be attempted to be n and  back. :Works by resupplying the found prefix back into the list, 7 eventually either finding the prefix or not matching. Like $ but returns empty text on failure. %Remove any trailing strings matching irs (input record separator)  from input string. Like perl' s chomp(1). Trim spaces at beginning and end =Fills 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 ' 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 ' 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 , this does not # remove any empty line at the end. 6A helper function for creating functions suitable for  modifySelectionB and  modifyRegionB. 8 To be used when the desired function should map across  the lines of a region. portable experimentalyi-devel@googlegroups.comNoneDirect subtrees of a tree (Prune 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, B return: (path to leaf at the end of the region,path from focused 7 node to the leaf, small node encompassing the region) AReturn 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. ;Given a path to a node, return a path+node which node that 1 encompasses the given node + a point before it. =Search the tree in pre-order starting at a given node, until C finding a leaf which is at or after the given point. An effort is 4 also made to return a leaf as close as possible to p. !TODO: rename to fromLeafToLeafAt >Takes a list of (node, index of already inspected child), and 7 return all leaves in this node after the said child). ?Given a root, return all the nodes encountered along it, their 5 paths, and the index of the child which comes next. BReturn all leaves after or before child depending on the relation  which is given. 4Return 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) ASearch the given list, and return the last tree before the given B 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. 6Given a tree, return (first offset, number of lines). A               :     portable experimentalyi-devel@googlegroups.comNone  None  !"#$%&'  !"#$%&' $ !"#%&' !"#$%&'portable experimentalyi-devel@googlegroups.comNoneW(%Exp can be expression or declaration *let expression +Data constructor ,Type constructor 2 data constructor same as with the TC constructor ."Righthandside of functions with |  the PAtom in PGuard' does not contain any comments 0Module identifier 1 An optional 2"Righthandside of functions with = 6An wrapper for errors 8 Where clause :-An atom is a token followed by many comments ;&A block of things separated by layout <#A parenthesized, bracked or braced @Class declaration BData declaration RHS CData declaration HType declaration MType signature \The body of the module _The module declaration part 6Check if a token is a brace, this function is used to - fix the layout so that do { works correctly 5Theese are the tokens ignored by the layout handler. h 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 Parse an operator using please Parse any operator Parse a consident Parse many variables DParse a nextline token (the nexLine token is inserted by Layout.hs) Parse a startBlock token Parse a endBlock token sym f returns a parser parsing f as a special symbol  exact tokList parse anything that is in tokList please p! returns a parser parsing either p or recovers with the  (Special ! ) token. Parse anything, as errors Parse an ConsIdent Parse a keyword 6Parse an unary operator with and without using please Parse comments Parse something thats optional -Parse an atom with, and without using please -Parse an atom with, and without using please %Parse an atom with optional comments  pSepBy p sep parse zero or more occurences of p , separated  by sep, with optional ending sep, 9 this is quite similar to the sepBy function provided in E Parsec, but this one allows an optional extra separator at the end. 4 commaSep p = p `pSepBy` (symbol (==(Special ','))) ESeparate a list of things separated with comma inside of parenthesis Parse a comma separator Parse a Module declaration %Check if next token is in given list Parse several imports Parse 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 Exporting module Parse a Let expression Parse a Do block  Parse part of a lambda binding. Parse an Of block Parse classes and instances 4 This is very imprecise, but shall suffice for now. * At least is does not complain too often. %Parse some guards and a where clause CRight-hand-side of a function or case equation (after the pattern) The RHS of an equation. Parse many of something :Parse a some of something separated by the token (Special  ) :Parse a some of something separated by the token (Special  ), or nothing pBlocks'* :: Parser TT r -> Parser TT (BL.BList r) >Parse a block of some something separated by the tok (Special  ) 'Parse something surrounded by (Special  ) and (Special  ) EParse something that can contain a data, type declaration or a class A normalA expression, where none of the following symbols are acceptable. 5Parse an expression, as a concatenation of elements. 5Parse an expression, as a concatenation of elements.  Parse an element of an expression or a pattern.  atC is a list of symbols that, if found, should be considered errors. 6List of things that always should be parsed as errors 2List of things that should not be parsed as noise AThese symbols are always properly recognized, and therefore they  should never be accepted as noise inside expressions. 2Parse parenthesis, brackets and braces containing - an expression followed by possible comments !2Parse parenthesis, brackets and braces containing - an expression followed by possible comments "2Parse parenthesis, brackets and braces containing - an expression followed by possible comments #>Create a special error token. (e.g. fill in where there is no D correct token to parse) Note that the position of the token has to 3 be correct for correct computation of node spans. ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde $ % &fgh ' ( ) * + ,   -   . / 0 1  2 3    4  5 6 7 8      9    :   ; <  = > ?  @   ! " A B C # DA()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghBedc(`]YTNMHCA=<;:9873210/.-,+*)ab^_Z[\UVWXOPQRSIJKLDEFGFB>?@456fhgj(;`]YTNMHCA=<;:9873210/.-,+*)ab^_Z[\UVWXOPQRSIJKLDEFGFB>?@456cde $ % &fgh ' ( ) * + ,   -   . / 0 1  2 3    4  5 6 7 8      9    :   ; <  = > ?  @   ! " A B C # Dportable experimentalyi-devel@googlegroups.comNonet?Search the given list, and return the 1st tree after the given B point on the given line. This is the tree that will be moved if D something is inserted at the point. Precondition: point is in the  given line. u6Given a tree, return (first offset, number of lines). |VCreate a special error token. (e.g. fill in where there is no correct token to parse) R Note that the position of the token has to be correct for correct computation of  node spans. ijklmnopqrstuvwxyz{| Eijklmnopqrstuvwxyz{|pqrsoinmlkjtuvwxyz{|inmlkjopqrstuvwxyz{| Eportable experimentalyi-devel@googlegroups.comNone FGet strokes Module for module GGet strokes for Imports H-Get strokes for expressions and declarations } F G H~ I J K L M N O P Q R S T U V}~}~} F G H~ I J K L M N O P Q R S T U Vportable experimentalyi-devel@googlegroups.comNone W Wportable experimentalyi-devel@googlegroups.comNone(DRepresents 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 Failable4 can represent failure. This is a useful class for = future work, since then we can make stroking much easier.  Instances of  Strokable0 are datatypes which can be syntax highlighted. Normal stroker. Error stroker. LGiven 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' if there were no errors. ' Otherwise returns error strokes for xs'. Given a list of TT8, if any of them is an error, returns an error stroker, L otherwise a normal stroker. Using e.g. existentials, we could make this K 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. Parser for statements such as return, while, do-while, for, etc.  Parser for blocks7, 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. 6TODO: function hello() var x; is not a valid program. LParser for expressions which may be statements. In reality, any expression L is also a valid statement, but this is a slight compromise to get rid of M 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]4. Anything which is useful in such a scenario goes  here. TODO: This accepts [] , but shouldn' t, since x[] is invalid. Parser for expressions. JParses both empty and non-empty arrays. Should probably be split up into 0 further parts to allow for the separation of [] and [1, 2, 3]. Parses a semicolon if it' s there. 4Parses 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. 1General recovery parser, inserts an error token. Weighted recovery. Better name for  X. Better name for  Y. Z=TODO: This code is *screaming* for some generic programming. 6TODO: 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 [ \ ] ^ _ ` a b c Z d e f g h i j kffK   [ \ ] ^ _ ` a b c Z d e f g h i j kNone1The main verifier which calls the sub-verifiers. DGiven a list of function declarations, checks for multiple function ( declarations, including the functions' subfunctions.  Given two Tok t, compares the ts. 4Returns 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  l, but drops the first element in the result.  m n o   m n o Safe-Inferred            portable experimentalyi-devel@googlegroups.comNone3Mutation actions (also used the undo or redo list)  For the undoredo, we use the partial checkpoint/# (Berlage, pg16) strategy to store / just the components of the state that change. DNote that the update direction is only a hint for moving the cursor E (mainly for undo purposes); the insertions and deletions are always  applied Forward. p buffer text qMarks for this buffer rsyntax highlighting state s0set of (non overlapping) visual overlay regions t:Lowest modified offset since last recomputation of syntax u New FBuffer filled from string. vWrite string into buffer. wWrite string into buffer. xPShift a mark position, supposing an update at a given point, by a given amount. & Negative amount represent deletions. y Point of EOF zReturn n Chars starting at i of the buffer. {@TODO: This guy is a pretty big bottleneck and only one function E 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. " 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 Q 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 E ordered and non-overlapping. The lists of strokes are ordered by 0 decreasing priority: the 1st layer should be painted on top. Checks if an Update is valid Apply a valid update Reverse the given update 4Line at the given point. (Lines are indexed from 1) <Point that starts the given line (Lines are indexed from 1)  Point that'2s at EOL. Notably, this puts you right before the C 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. QReturn indices of all strings in buffer matching regex, inside the given region. Modify a mark value. dReturns the requested mark, creating a new mark with that name (at the supplied position) if needed Q  p q r s t   ! u v w x y z {" | } ~  Line for which to grab EOL for 5Point from which we take the line to find the EOL of <   p ! u y z {" | } ~  7   p q r s t    ! u v w x y z {" | } ~  !None &.A URList consists of an undo and a redo list. ' A new empty &. I Notice we must have a saved file point as this is when we assume we are A opening the file so it is currently the same as the one on disk ( Add an action to the undo list. E According to the restricted, linear undo model, if we add a command G whilst the redo list is not empty, we will lose our redoable changes. )CAdd a saved file point so that we can tell that the buffer has not 4 been modified since the previous saved file point. F Notice that we must be sure to remove the previous saved file points  since they are now worthless. *"This undoes one interaction step. +!This redoes one iteraction step. DPrepare undo by moving one interaction point from undoes to redoes. 5Remove an initial interactive point, if there is one 6Insert an initial interactive point, if there is none DRepeatedly undo actions, storing away the inverse operations in the  redo list. Run the undo-function f on a swapped URList making it . operate in a redo fashion instead of undo. ,undoIsAtSavedFilePoint. True4 if the undo list is at a SavedFilePoint indicating G that the buffer has not been modified since we last saved the file. S Note: that an empty undo list does NOT mean that the buffer is not modified since W the last save. Because we may have saved the file and then undone actions done before  the save. #$% & '()*+ , #$%&'()*+, '(),*+&#%$# %$& '()*+ , " Safe-Inferred-Record presenting a frontend' s interface. The functions 4 and 2 are both run by the editor' s main loop, Nin 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 4 and 2 are used.  the function 4! is responsible for updating the Editor with the L width and height of the windows. Some frontends, such as Pango, need to I modify their internal state to do this, and will consequently change % their display. This is expected.  the function 20 should cause the UI to update its display with ! the information given in the Editor.  the functionalities of 4 and 2 overlap to some extent, in R the sense that both may cause the frontend to update its display. The Yi core P provides the following guarantees which the frontend may take advantage of: & in the main editor loop (i.e. in the  refreshEditor function),  40 will be run (possibly multiple times) and then 2 will L 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 4 and the run of 2, some changes  may be made to the Editor*. However, the text, text attributes, and P (displayed) window region of all windows will remain the same. However, ( the cursor location may change. FThis guarantee allows frontends which calculate rendering of the text  during the 46 stage to avoid recalculating the render again during  2*. Pango is an example of such a frontend. OThe Yi core provides no guarantee about the OS thread from which the functions 4 and 2A are called from. In particular, subprocesses (e.g. compilation, ghci) will run 4 and 2 from new OS threads (see startSubprocessWatchers in Yi.CoreN). The frontend must be preparaed for this: for instance, Gtk-based frontends should wrap GUI updates in  postGUIAsync. / Main loop 0&Clean up, and also terminate if given true 1"Suspend (or minimize) the program 2$Refresh the UI with the given state 3HUser force-refresh (in case the screen has been messed up from outside) 4Set window width and height 5Reload cabal project views -./0123456 -./0123456 -./0123456-./0123456#portable experimentalyi-devel@googlegroups.comNoneF<4Configuration record. All Yi hooks can be set here. > UI to use. ?UI-specific configuration. @+Actions to run when the editor is started. A=Actions to run after startup (after startActions) or reload. BDefault keymap to use. D#List modes by order of preference. E8Produce a .yi.dbg file with a lot of debug information. FSet to 9 for an emacs-like behaviour. GSet to  $ for an emacs-like behaviour, where 0 all deleted text is accumulated in a killring. JList of layout managers for cycleLayoutManagersNext K%Custom configuration, containing the s. Configure with configVariableA. LWhen should we use a fat1 cursor (i.e. 2 pixels wide, rather than 1)? Fat < cursors have only been implemented for the Pango frontend. U'Font name, for the UI that support it. V'Font size, for the UI that support it. WStyle of scroll X6Amount to move the buffer when using the scroll wheel Y0Should the scrollbar be shown on the left side? Z7Hide scrollbar automatically if text fits on one page. [9Hide 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 colours gThe Editor state iStack of all the buffers. - Invariant: first buffer is the current one. k'Supply for buffer, window and tab ids. l7current tab contains the visible windows pointed list. mdynamic components q<currently highlighted regex (also most recent regex for use  in vim bindings) sProcessed events that didn't yield any action yet. tAActions to be run when the buffer is closed; should be scrapped. w?Used to specify the behaviour of the automatic indent command. x9Decrease the indentation to the next smaller indentation , hint, if no such hint exists do nothing. y1Increase the indentation to the next higher hint & if no such hint exists do nothing. z9Decrease the indentation to the next smaller indentation 8 hint. If we are currently at the smallest level then  cycle back to the largest {8Increase the indentation to the next higher indentation 5 hint. If we are currently at the highest level of . indentation then cycle back to the lowest. |AA Mode customizes the Yi interface for editing a particular data @ format. It specifies when the mode should be used and controls B 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 highlighter Prettify current " paragraph" !Buffer-local keymap modification emacs-style auto-indent line *adjust the indentation after modification  Follow a "link"4 in the file. (eg. go to location of error message) @Strokes that should be applied when displaying a syntax element # should this be an Action instead? 7An action that is to be executed when this mode is set (buffer-local modeline formatting method /go to the point where the variable is declared immutable unique key undo/ redo list dynamic components 3prefered column to arrive at when we do a lineDown / lineUp updates that haven't been synched in the UI yet +time of the last synchronization with disk read-only flag 3the keymap is ready for insertion into this buffer 'does buffer contain directory contents .How many points (frontend-specific) to change  the font by in this buffer  Currently 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 Tab Indent by so many columns 0The BufferM monad writes the updates performed. Content of the top-level loop. For insertion-only modes $The type of user-bindable functions 0 TODO: doc how these are actually user-bindable  are they?  input stream output stream &The only mutable state in the program 789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~|}~w{zyxvughijklmnopqrstdef`abcRSTUVWXYZ[\]^_QLPONM<=>?@ABCDEFGHIJK7;:9847;:98<=>?@ABCDEFGHIJKLPONMQR STUVWXYZ[\]^_`abcdefg hijklmnopqrstuvw{zyx|}~ $portable experimentalyi-devel@googlegroups.comNone% Safe-Inferred5Given a path relative to application data directory, 4 this function finds a path to a given data file. >Given a path relative to application configuration directory, = this function finds a path to a given configuration file. GGiven an action that retrieves config path, and a path relative to it, D this function joins the two together to create a config file path. $Get Yi master configuration script. AGet articles.db database of locations to visit (for Yi.IReader.) 7Get path to Yi history that stores state between runs. ?Get path to environment file that defines namespace used by Yi  command evaluator.      portable experimentalyi-devel@googlegroups.comNone=*Gets 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  3, it drops the the number of characters specified. &shortIdentString 3 (MemBuffer "hello") "*hello*"'shortIdentString 3 (FileBuffer "hello")"lo"Gets the buffer'%s identifier string, emphasising the : identString (MemBuffer "hello") "*hello*" identString (FileBuffer "hello")"hello"/update the syntax information (clear the dirty flag) @Increases the font size in the buffer by specified number. What 6 this number actually means depends on the front-end. @Decreases the font size in the buffer by specified number. What 6 this number actually means depends on the front-end. 9Given a buffer, and some information update the modeline @N.B. the contents of modelines should be specified by user, and  not hardcoded. <Given a point, and the file size, gives us a percent string Adds an overlay to the buffer Remove an existing overlay ! Execute a BufferM7 value on a given buffer and window. The new state of A the buffer is returned alongside the result of the computation. ' Execute a BufferMB value on a given buffer, using a dummy window. The new state of  the buffer is discarded. (:Mark the current point in the undo list as a saved state. FAnalogous to const, but returns a function that takes two parameters,  rather than one. /0Mode applies function that always returns True. 01Mode applies function that always returns False. 2Create buffer named nm with contents s 3 Point of eof 4Extract the current point 9(Move point in buffer to the given index <#Revert all the pending updates; don't touch the point. =7Write an element into the buffer at the current point. >1Write the list into the buffer at current point. ?!Insert newline at current point. @ Insert given  + at specified point, extending size of the  buffer. A Insert the  , at current point, extending size of buffer B;Insert the char at current point, extending size of buffer Implementation note: This just Bs 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  can be recorded. A possible C improvement for space would be to have yi-rope  package optimise  for appends with length 1. C deleteNAt n p deletes n# characters forwards from position p DReturn the current line number EReturn line numbers of marks FGo to line number n. n is indexed from 1. Returns the A actual line we went to (which may be not be the requested line,  if it was out of range) H Set the mode JModify the mode Q<Return indices of strings in buffer matched by regex in the  given region. R@Return indices of next string in buffer matched by regex in the  given direction VHighlight the selection Z.Move point by the given number of characters. ; A negative offset moves backwards a positive one forward. [Move point -1 \Move cursor -n ]Move cursor +1 ^Move cursor +n _Move 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. fMove point up one line gMove point down one line h#Return the contents of the buffer. i;Returns the contents of the buffer between the two points. If the startPoint >= endPoint#, empty string is returned. If the A points are out of bounds, as much of the content as possible is  taken: you're not guaranteed to get endPoint - startPoint  characters. j(Read the character at the current point k&Read the character at the given index K This is an unsafe operation: character NUL is returned when out of bounds qDelete n+ characters forward from the current point r Gives the  for the current buffer. sCurrent column. F Note that this is different from offset or number of chars from sol. 5 (This takes into account tabs, unicode chars, etc.) @Decides which column we should be on after the given character. w.Returns start of line point for a given point p x%Returns end of line for given point. y&Go to line indexed from current point 5 Returns the actual moved difference which of course ; may be negative if the requested difference was negative. z@Access to a value into the extensible state, keyed by its type. ( This allows you to retrieve inside a  monad, ie:  value <- getBufferDyn {@Access 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 a5, and return to the current point. (by using a mark) ~ Perform an  BufferM a#, and return to the current point.  Perform an  BufferM a,, and return to the current line and column ) number. The difference between this and ~ is that here E we attempt to return to the specific line and column number, rather @ than a specific number of characters from the beginning of the  buffer. BIn case the column is further away than EOL, the point is left at  EOL: b is used internally. 6What would be the point after doing the given action? * The argument must not modify the buffer. Just stores the mode name.        3Number of characters to drop from FileBuffer names Buffer to work with     !" # $%&'()*+, -. /012 3456789: ;<=>?@ABCDEFG HIJKLM NOPQR STUV WXYZ[\]^_`abcdefghiPoint to start at Point to stop at jklmnop qrstuv wxyz{|}~   "wxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)"!#'Dstuv34cwxE9ab_fg2 "Fy[]Z\^A@Bq5=>?Cjh-.XTUY$}S%&V*HIGJQRk:ed`( |~ <O|}~w{zyx/01MLKNP 867W {z  lmnop+,;ir             !" # $%&'()*+, -. /012 3456789: ;<=>?@ABCDEFG HIJKLM NOPQR STUV WXYZ[\]^_`abcdefghijklmnop qrstuv wxyz{|}~  &portable experimentalyi-devel@googlegroups.comNone 'Delete an arbitrary part of the buffer $Replace a region with a given rope. :Map the given function over the characters in the region.  Swap the content of two Regions 1Modifies the given region according to the given  string transformation function 2Extend 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 1 a list of small regions form this block region. BJoins lines in the region with a single space, skipping any empty  lines. AConcatenates lines in the region preserving the trailing newline  if any. !The string modification function The region to modify      'portable experimentalyi-devel@googlegroups.comNone"Boundary side Designate a given unit of text. the whole document a verticalN line of text (area of text between two characters at the same column number) "a line of text (between newlines) a single character Turns a unit into its negative+ by inverting the boundaries. For example,  outsideUnit unitViWord5 will be the unit of spaces between words. For units  without boundaries (, , ...), this is the identity  function. 8Common boundary checking function: run the condition on len @ characters in specified direction shifted by specified offset. kdelimited on the left and right by given characters, boolean argument tells if whether those are included. -a word as in use in Emacs (fundamental mode) $Tells if a char can end a sentence ( , !, ?). BVerifies that the string matches all the predicates, pairwise. If  the string is  too small, then return  . Note the length of  predicates has to be finite. @Helper that takes first two characters of YiString. Faster than  take 2 and string conversion. ?Separator characters (space, tab, unicode separators). Most of % the units above attempt to identify words with various D 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). *unitSep is true for any kind of whitespace/ separator 2unitSepThisLine is true for any kind of whitespace/separator on this line only Is the point at a Unit boundary in the specified  Direction? 3Paragraph to implement emacs-like forward-paragraph/backward-paragraph UParagraph that begins and ends in the paragraph, not the empty lines surrounding it. XUnit 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: A genAtBoundaryB u Backward InsideBound = atBoundaryB u Backward @ genAtBoundaryB u Forward OutsideBound = atBoundaryB u Forward @Repeat an action until the condition is fulfilled or the cursor 7 stops moving. The Action may be performed zero times. @Repeat an action until the condition is fulfilled or the cursor 6 stops moving. The Action is performed at least once. BDo an action if the current buffer character passes the predicate Generic 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. Generic maybe move operation.  As genMoveB, but don'&t move if we are at boundary already. Move to the next unit boundary As ), unless the point is at a unit boundary Transforms the region given by  in the   with  user-supplied function. HDelete between point and next unit boundary, return the deleted region. 9Region of the whole textunit where the current point is. CNon empty region of the whole textunit where the current point is. 0Region between the point and the next boundary. 6 The region is empty if the point is at the boundary. :Non empty region between the point and the next boundary, ? In fact the region can be empty if we are at the end of file. 7Non empty region at given point and the next boundary, D Offset from current position  Look-ahead  predicate Direction to look in          66;          (None8Extend the given region to boundaries of the text unit. A For instance one can extend the selection to complete lines, or  paragraphs. >789:;>7;:98)portable experimentalyi-devel@googlegroups.comNone\Move point to start of line Move point to end of line Move 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 x1 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 line 2Move to the last non-space character in this line 1Go to the first non space character in the line; 9 if already there, then go to the beginning of the line. @True if current line consists of just a newline (no whitespace) !Note: Returns False if line doesn'(t have any characters besides a newline Move down next n paragraphs  Move up prev n paragraphs 8Return true if the current point is the start of a line 6Return true if the current point is the end of a line True if point at start of file True 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 Read from point to end of line %Read from point to beginning of line <Get the previous point, unless at the beginning of the file 2Get the next point, unless at the end of the file Reads in word at point. Reads in word before point. Delete one character backward 9Delete forward whitespace or non-whitespace depending on  the character under point. :Delete backward whitespace or non-whitespace depending on  the character before point. 5Delete backward to the sof or the new line character emacs' delete-horizontal-space with the optional argument.  %capitalise the word under the cursor  lowerise word under the cursor  )capitalise the first letter of this word /switch the case of the letter under the cursor  )Delete to the end of line, excluding it. *Delete whole line moving to the next line 1Transpose two characters, (the Emacs C-t action) 0Delete trailing whitespace from all lines. Uses   to get back to where it was. Marks &Set the current buffer selection mark &Get the current buffer selection mark Exchange point & mark. >File info, size in chars, line no, col num, char num, percent Scroll up 1 screen Scroll down 1 screen &Scroll by n screens (negative for up) <Scroll according to function passed. The function takes the ; | Window height in lines, its result is passed to scrollB  | (negative for up) +Same as scrollB, but also moves the cursor -Same as scrollByB, but also moves the cursor Move to middle line in screen %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 return index of Sol on line n above current line &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 point $Move to n lines down from top of screen %Move to n( lines up from the bottom of the screen &Move to middle line in screen ')Return the region between point and mark !9Return the empty region if the selection is not visible. (KGet the current region boundaries. Extended to the current selection unit. )7Select the given region: set the selection mark at the    and the current point at the  . "2Extend the selection mark using the given region. +<Get a (lazy) stream of lines in the buffer, starting at the next line  in the given direction. #?Get the next line of text in the given direction. This returns  simply  $ if there no such line. , The same as  # but avoids the use of the  % A type in the return by returning the empty string if there is no  next line. &@Get closest line to the current line (not including the current C line) in the given direction which satisfies the given condition.  Returns  $) if there is no line which satisfies the  condition. -AReturns the closest line to the current line which is non-blank, A in the given direction. Returns the empty string if there is no < such line (for example if we are on the top line already). 'AUses a string modifying function to modify the current selection D Currently unsets the mark such that we have no selection, arguably = we could instead work out where the new positions should be * and move the mark and point accordingly. /:Prefix each line in the selection using the given string. 06Uncomments the selection using the given line comment 9 starting string. This only works for the comments which ! begin at the start of the line. 1 Just like  ( but automatically inserts a < whitespace suffix to the inserted comment string. In fact: (>Toggle line comments in the selection by adding or removing a  prefix to each line. );Justifies all the lines of the selection to be the same as  the top line. @ NOTE: if the selection begins part way along a line, the other J lines will be justified only with respect to the part of the indentation  which is selected. 24Replace the contents of the buffer with some string *:Fill the text in the region so it fits nicely 80 columns. 4Sort the lines of the region. 5CHelper function: revert the buffer contents to its on-disk version @=Increase (or decrease if negative) next number on line by n. +!Increment number in string by n. A$Is character under cursor a number. BHUsed by isNumber to test if current character under cursor is a number. C Characters ['a'..'f']2 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. , - . /     0  1           !"  #$%& 2' !() "*+ #, &- './&The string that starts a line comment 0The string which begins a  line comment A potentially shorter  string that begins a comment 1 ( )2 *3456789:;<=>?@ +ABCh      !"#$%&'()*+,-./0123456789:;<=>?@ABCh *: $3?=,-'(@<A7/+ &.>;258 !)64"#9 BC10% { , / . -     0  1           !"  #$%& 2' !() "*+ #, &- './01 ( )2 *3456789:;<=>?@ +ABC*portable experimentalyi-devel@googlegroups.comNoneDReturn either a t5 or the number of spaces specified by tabSize in the K IndentSettings. Note that if you actually want to insert a tab character < (for example when editing makefiles) then you should use: insertB '\t'. EA specialisation of  3. 7 This is the most basic and the user is encouraged to  specialise  3 on their own. 34This 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 3 from the previous line. Both of these are in the  : monad although the second seems like it is unnecessary. B However we must take into account the length of tabs which come 8 from the the tab settings and hence we must be in the   monad. DTo get the straightforward behaviour of the indents of all previous : lines until one of them has zero indent call this with:  2autoIndentHelperB fetchPreviousIndentsB (fmap (: [] ) indentOfB) B However commonly we wish to have something more interesting for B the second argument, in particular we commonly wish to have the C last opening bracket of the previous line as well as its indent. F;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 45A function generally useful as the first argument to   3 . This searches the lines above 5 the current line for the indentations of each line 2 until we get to a line which has no indentation 6 *and* is not empty. Indicating that we have reached  the outer scope. 58Returns the position of the last opening bracket on the , line which is not closed on the same line. 4 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 9 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. GBReturns the indentation of a given string. Note that this depends %on the current indentation settings. 6=Returns the length of a given string taking into account the + white space and the indentation settings. H9Indents the current line to the given indentation level. A In addition moves the point according to where it was on the A line originally. If we were somewhere within the indentation C (ie at the start of the line or on an empty line) then we want 4 to just go to the end of the (new) indentation. C However if we are currently pointing somewhere within the text G of the line then we wish to remain pointing to the same character. I$Indent as much as the previous line J Indent as much as the next line LGInsert a newline at point and indent the new line as the previous one. 7>Set the padding of the string to newCount, filling in tabs if 1 expandTabs is set in the buffers IndentSettings 81Counts the size of the indent in the given text. *Assumes nothing but tabs and spaces: uses  9. :Hshifts right (or left if num is negative) num times, filling in tabs if 1 expandTabs is set in the buffers IndentSettings MJIncreases the indentation on the region by the given amount of shiftWidth N@Return the number of spaces at the beginning of the line, up to  the point. DE 3*Action to fetch hints from previous lines -Action to calculate hints from previous line Sets the indent behaviour,  see   for a description F 4 5G 6HIJK ;L 7 8 :MN rDEFGHIJKLMN EFJIKGNrHLMDDE 3F 4 5G 6HIJK ;L 7 8 :MN+portable experimentalyi-devel@googlegroups.comNoneOPQB<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_OPQ'<=>?@ABCDEFGHIJKRSTUVWXYZ[\]^_QLPONMOPQOPQ,NoneRInitialise the ui RRRR-NoneS5Fields that can be modified with all lens machinery. T%The configuration monad. Run it with  configMain. WAccessor for any !, to be used by modules defining 5s. Such modules should provide a custom-named field. .For instance, take the following hypothetical :  5newtype UserName = UserName { unUserName :: String } & deriving(Typeable, Binary, Default) #instance YiConfigVariable UserName  $(nameDeriveAccessors '' UserName (n -> Just (n ++ "A")))   userName :: S  < userName = unUserNameA   W7Here, the hypothetical library would provide the field userName to be used in preference to customVariable. STUVWSTUVWTUVSWSTUVW portable experimentalyi-devel@googlegroups.comNone    = > ? @ A B C D E F G H I J   !"#$%&'()*+,789:;wxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN !.portable experimentalyi-devel@googlegroups.comNone;XThe initial state c8Create 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. d<Delete a buffer (and release resources associated with it). eReturn the buffers we have, in no particular order f@Return a prefix that can be removed from all buffer paths while  keeping them unique. iFind buffer with this key jFind buffers with this name k0Find buffer with given name. Fail if not found. K?Make all buffers visible by splitting the current window list. L FIXME: rename to displayAllBuffersE; make sure buffers are not open twice. lAPerform action with any given buffer, using the last window that  was used for that buffer. m%Perform action with any given buffer n"Perform action with current window' s buffer qReturn the current buffer rPrints a message with  L. s!Prints a all given messages with  L. uSet the  background status line vClear the status line yPut string into yank register z)Return the contents of the yank register {)Dynamically-extensible state components. AThese hooks are used by keymaps to store values that result from D Actions (i.e. that restult from IO), as opposed to the pure values 9 they generate themselves, and can be stored internally. The m field is a type-indexed map. +Retrieve a value from the extensible state |<Insert a value into the extensible state, keyed by its type }7Like fnewE, create a new buffer filled with the String s, 0 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. M0Create a new zero size window on a given buffer +Create a new window onto the given buffer. 2Attach the specified buffer to the current window NFAttach the specified buffer to some other window than the current one @Switch to the buffer specified as parameter. If the buffer name & is empty, switch to the next buffer. Close 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 window ;Swaps the focused window with the first window. Useful for  layouts such as  HPairOneStack$, for which the first window is the  largest. BMoves 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 OA fake: accessor that fixes the current buffer after a change of  the current window. AEnforces invariant that top of buffer stack is the buffer of the  current window. PJCounterpart of fixCurrentBufferA_: fix the current window to point to the  right buffer. ?Return the windows that are currently open on the buffer whose  key is given 6bring the editor focus the window with the given key. 0Fails if no window with the given key is found. GSplit the current window, opening a second window onto current buffer.  TODO: unfold newWindowE here? BCycle to the next layout manager, or the first one if the current  one is nonstandard. >Cycle to the previous layout manager, or the first one if the  current one is nonstandard. QHelper function for layoutManagersNext and layoutManagersPrevious 8Next variant of the current layout manager, as given by { <Previous variant of the current layout manager, as given by  | 3Sets the given divider position on the current tab ECreates a new tab containing a window that views the current buffer. 5Moves to the next tab in the round robin set of tabs 9Moves to the previous tab in the round robin set of tabs ?Moves the focused tab to the given index, or to the end if the  index is not specified. GDeletes the current tab. If there is only one tab open then error out. C When the last tab is focused, move focus to the left, otherwise  move focus to the right. DClose the current window. If there is only one tab open and the tab + contains only one window then do nothing. 6Make the current window the only window on the screen ESwitch 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 RDDefines an action to be executed when the current buffer is closed. >Used by the minibuffer to assure the focus is restored to the % buffer that spawned the minibuffer. 0todo: These actions are not restored on reload. Atodo: These actions should probably be very careful at what they  do. BTODO: All in all, this is a very ugly way to achieve the purpose. D The nice way to proceed is to somehow attach the miniwindow to the  window that has spawned it. 0Creates an in-memory buffer with a unique name. dX S TYZ U[ V W\ X]^ Y_`a Zb [ \cThe buffer indentifier $The contents with which to populate  the buffer ] ^ _defghijk Klmnopqrstuvwx `yz{|} buffer name buffer contents ~ M N O P Q a R bc`abcdefghijklmnopqrstXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~cghijklmnopqrstdef`abcbeYvfqZpdXhijgk{z[}~\rst|]yuwx^ca_`nolmdX S TYZ U[ V W\ X]^ Y_`a Zb [ \c ] ^ _defghijk Klmnopqrstuvwx `yz{|}~ M N O P Q a R bportable experimentalyi-devel@googlegroups.comNone Like usual  c( but user can specify case sensitivity.  See  d for exotic unicode gotchas. 'Prefix matching function, for use with  &Infix matching function, for use with   Example: abc matches a1b2c &TODO: this is a terrible function, isn' t this just # case-insensitive infix?  Fkzetsu AComplete a string given a user input string, a matching function A and a list of possibilites. Matching function should return the 2 part of the string that matches the user string. Same as  , but maps  showFunction on possible  matches when printing eDThis function attempts to provide a better tab completion result in L cases where more than one file matches our prefix. Consider directory with  following files: [Main.hs, Main.hi, Main.o, Test.py, Foo.hs]. After inserting Mai5 into the minibuffer and attempting to complete, the & possible matches will be filtered in  to  [Main.hs, Main.hi, Main.o]& however because of multiple matches, ' the buffer will not be updated to say Main. but will instead stay at Mai. KThis is extremely tedious when trying to complete filenames in directories O 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 on matcher function items to match against Show function Input to match on matcher function items to match against  e f g     e f g/portable experimentalyi-devel@googlegroups.comNone local name of the tag file & TODO: reload if this file is changed path to the tag file directory  tags are relative to this path map from tags to files trie to speed up tag hinting Helper 0Find the location of a tag using the tag table. % Returns a full path and line number h5Super simple parsing CTag format 1 parsing algorithm 5 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 prefix 1Extends the string to the longest certain length Set a new TagTable Reset the TagTable 'Get the currently registered tag table ! i j k l h m n o p q r s t i j k l h m n o p q r s t0portable experimentalyi-devel@googlegroups.comNonePut regex into regex register Clear the regex register "Return contents of regex register 1portable experimentalyi-devel@googlegroups.comNonewrite a/ returns a keymap that just outputs the action a.  withModeY f runs f on the current buffer's mode. As this runs in  the YiM monad, we'"re able to do more than with just M such as : prompt the user for something before running the action. Predicate to select exceptions Computation to run Handler  u v w x y66 u v w x y2portable experimentalyi-devel@googlegroups.comNone 6Parse 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 >>  actQ-./0123456789:;<=>?@ABCDEFGHIJK3portable experimentalyi-devel@googlegroups.comNonereloads the configuration CSerializes the editor state and relaunches Yi using the serialized A state. The launch of Yi will result in recompilation of the user's  custom Yi. This, in effect, reloads the configuration. 4portable experimentalyi-devel@googlegroups.comNone  TODO: Why  z? Take an , and return the first  and an % ArticleDB - *without* that article. >Get the first article in the list. We use the list to express C relative priority; the first is the most, the last least. We then 5 just cycle through - every article gets equal time. CWe remove the old first article, and we stick it on the end of the - list using the presumably modified version. LInsert a new article with top priority (that is, at the front of the list). Serialize given  out. Read in database from  and then parse it  into an . BReturns the database as it exists on the disk, and the current Yi D buffer contents. Note that the Default typeclass gives us an empty B Seq. So first we try the buffer state in the hope we can avoid a D 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 -, dump the scheduled article into the buffer  (replacing previous contents). 5Go to next one. This ignores the buffer, but it doesn' t remove @ anything from the database. However, the ordering does change. @Delete current article (the article as in the database), and go  to next one. BThe main action. We fetch the old database, we fetch the modified 4 article from the buffer, then we call the function  updateSetLast D which removes the first article and pushes our modified article to  the end of the list. @Assume 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.  { | { |5None The class of " valid hooks"%. This class is exported abstractly, B but the instances can be phrased quite simply: the functions (of E arbitrarily many arguments, including zero) which run in either the  d or  monads. *A typical example would be something like Int -> String -> d String. =Looks up the configured value for the hook, and runs it. The  argument to * will typically be a record accessor. See   for the valid hook types.  } ~  SWWS } ~  6portable experimentalyi-devel@googlegroups.comNone$Start an input session with History /Finish the current input session with history. 0Helper that sets the given history at ident and |s  the result.       identifier History to set Map of existing histories                 portable experimentalyi-devel@googlegroups.comNoneDGlobal searching. Search for regex and move point to that position.  Nothing* means reuse the last regular expression. Just s means use  s; as the new regular expression. Direction of search can be  specified as either Backward or Forward (forwards in the buffer). E Arguments to modify the compiled regular expression can be supplied  as well. Set up a search. @Do a search, placing cursor at first char of pattern, if found. M Keymaps may implement their own regex language. How do we provide for this?  Also, what'%s happening with ^ not matching sol?  2Search and Replace all within the current region. > Note the region is the final argument since we might perform B the same search and replace over multiple regions however we are F unlikely to perform several search and replaces over the same region ; since the first such may change the bounds of the region. !-Peform a search and replace on the selection "7Replace a string by another everywhere in the document #(Search and replace in the given region. AIf the input boolean is True, then the replace is done globally, C otherwise only the first match is replaced. Returns the number of  replacements done. %<Search and replace in the region defined by the given unit.  The rest is as in $. )5Create a SearchExp that matches exactly its argument /&Succesfully finish a search. Also see 1. 0Cancel a search. Also see 2. 1 Wrapper over  $ that passes through the action and D accepts the search as successful (i.e. when the user wants to stay  at the result). 2 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). ?Editor action describing how to end finish incremental search.  The act7 parameter allows us to specify an extra action to run 0 before finishing up the search. For Vim, we don' t want to do  anything so we use  % which just does nothing. For emacs, 7 we want to cancel highlighting and stay where we are.  Specialised   to do nothing as the action. 3#Find the next match and select it. " Point is end, mark is beginning. 4'Replace all the remaining occurrences. 5Exit from query/ replace. 6BWe replace the currently selected match and then move to the next  match. @This may actually be a bit more general it replaces the current E selection with the given replacement string in the given window and  buffer. - Nothing means used previous & pattern, if any. Complain otherwise. . Use getRegexE to check for previous patterns #Flags to modify the compiled regex Backward or Forward  The string to search for The string to replace it with  The region to perform this over !text to search for text to replace it with "#$% &'() *+,- ./012 3456 &  !"#$%&'()*+,-./0123456&  ) !"$#%&'(,-.+*0/213465)   !"#$% &'() *+,- ./012 3456 7None CTrims per-command histories to contain at most N completions each. 8*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. JReads and decodes a persistent state in both strict, and exception robust  way. 9CLoads a persistent state, and sets Yi state variables accordingly.  7 8 9789987   7 8 98portable experimentalyi-devel@googlegroups.comNone 0Make an action suitable for an interactive run.  UI will be refreshed. :AStart up the editor, setting any state with the user preferences 1 and file names passed in, and turning on the UI ;Runs a  action in a separate thread. Notes:  It seems to work but I don' t know why  Maybe deadlocks?  If you':re outputting into the Yi window, you should really limit D the rate at which you do so: for example, the Pango front-end will  quite happily segfault/$double-free if you output too fast. BI 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 E 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 0 _ -> threadDelay 1000000 >> return False  8Display the errors buffer if it is not already visible. =Process events by advancing the current keymap automaton and " executing the generated actions. <Quit. 7Update (visible) buffers if they have changed on disk. 6 FIXME: since we do IO here we must catch exceptions! Hide selection, clear  syntax dirty flag (as appropriate). >Redraw ?Suspend the program @@Pipe a string through an external command, returning the stdout 1 chomp any trailing newline (is this desirable?) Todo: varients with marks? Same as r%, but do nothing instead of printing () B-Show an error on the status line and log it. CClose the current window. 4 If this is the last window open, quit the program. @CONSIDER: call quitEditor when there are no other window in the   2 function. (Not possible since the windowset type ( disallows it -- should it be relaxed?) DThis is a like C$ but with emacs behaviour of C-x 0:  if we'8re trying to close the minibuffer or last buffer in the D editor, then just print a message warning the user about it rather " closing mini or quitting editor. Kill a given subprocess E9Start a subprocess with the given command and arguments.  Appends a   to the given buffer. ATODO: Figure out and document the Bool here. Probably to do with   .  :;/runs after we insert the action: this may be a 4 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 action The action to actually run < =>?@ ABCD E Buffer to append to Text to append F GH:;<=>?@ABCDEFGH:<>?HBCD@EFAG=; :; < =>?@ ABCD E F GH9portable experimentalyi-devel@googlegroups.comNone .What to prompt the user when asked this type? O Tag a type with a documentation R;Prints out the rope of the current buffer as-is to stdout. AThe only way to stop it is to close the buffer in question which  should free up the  C. S+Prompts for a buffer name, turns it into a  C and passes D it on to the handler function. Uses all known buffers for hinting. TAPrompts the user for comment syntax to use for the current mode. U:Open a minibuffer window with the given prompt and keymap A The third argument is an action to perform after the minibuffer A is opened such as move to the first occurence of a searched for  string. If you don't need this just supply  return () V#withMinibuffer prompt completer act: open a minibuffer with prompt. Once  a string s is obtained, run act s.  completer can be used to complete 3 functions: it returns a list of possible matches. WMakes 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 A complete inputs by returning an incrementally better match, and C getHint can give an immediate feedback to the user on the current  input.  on Typing4 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. _9Open a minibuffer, given a finite number of suggestions. *TODO: decide whether we should be keeping  here or moving  to YiString. dReturns all the buffer names ;IJKLMN OPQ R SPrompt Handler .Hint 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 0 prefix for filtering regardless of what you do  here. TUVWList completion, such as . Matcher such as  /Function to fetch possibilites for completion. "Input to try and complete against XYZ[\]^_ `abcd IJKLMNOPQRSTUVWXYZ[\]^_`abcdU]V^_[\WXZYbcda`OPQNLKMIJTSR4IJKLMN  OPQ  R STUVWXYZ[\]^_ `abcd :portable experimentalyi-devel@googlegroups.comNone e?Given a possible starting path (which if not given defaults to C the current directory) and a fragment of a path we find all files @ within the given (or current) directory which can complete the B given path fragment. We return a pair of both directory plus the ? filenames on their own that is without their directories. The C reason for this is that if we return all of the filenames then we  get a hint2 which is way too long to be particularly useful. f?Given a path, trim the file name bit if it exists. If no path $ given, return current directory. g@Given a possible path and a prefix, return matching file names. hPlace mark at current point i(Select the contents of the whole buffer k9A simple wrapper to adjust the current indentation using = the mode specific indentation function but according to the  given indent behaviour. l0Generic emacs style prompt file action. Takes a prompt and a continuation  act' and prompts the user with file hints. mAs l1 but additionally allows the caller to transform B the list of hints arbitrarily, such as only showing directories. AFor use as the hint when opening a file using the minibuffer. We D essentially return all the files in the given directory which have  the given prefix. pLike M-x cd3, it changes the current working directory. Mighty  useful when we don'1t start Yi from the project directory or want to = switch projects, as many tools only use the current working  directory. q*Shows current working directory. Also see p. efghijklmPrompt 0Hint transformer: current path, generated hints Action over choice no pqrsRefghijklmnopqrsefpqgrhijklmnosRefghijklmno pqrs;portable experimentalyi-devel@googlegroups.comNone" /keep track of the num of successful operations #if True, DOChoice will be bypassed ,The full path to the directory being viewed 1 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. ?Alias serving as documentation of some arguments. We keep most  paths as   for the sole reason that we'll have to render  them. 0Elementary 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. H Logic and implementation of each operation are packaged in procDiredOp  See askDelFiles for example. K If new elem op is added, just add corresponding procDiredOp to handle it.  no operation 7to feedback, given the state. such as show the result. )prompt a string, provide keybindings for y, n,  !, q and optional h (help) this is useful when 7 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, 8 Remember that the input should be checked with DOCheck 7this is a shortcut, it invokes DCChoice if file exists 5similar to DOConfirm, but no user interaction. Could ! be used to check file existence  prompt a yes/no question. If yes, execute the 7 first list of embedded DiredOps otherwise execute the " second list of embedded DiredOps 0remove the buffers that associate with the file tCIf file exists, read contents of file into a new buffer, otherwise D creating a new empty buffer. Replace the current window with a new  window onto the new buffer. FIf the file is already open, just switch to the corresponding buffer. ENeed to clean up semantics for when buffers exist, and how to attach  windows to buffers. Yi.File: module re-exports this, you probably want to import that  instead. CIn case of a decoding failure, failure message is returned instead  of the  C. Execute the operations BPass the list of remaining operations down, insert new ops at the  head if needed -Delete a list of file in the given directory < Ask for confirmation, if yes, perform deletions, otherwise  showNothing > Confirmation is required for recursive deletion of non-empty & directry, but only the top level one D Show the number of successful deletions at the end of the excution < TODO: ask confirmation for wether to remove the associated  buffers when a file is removed >Write the contents of the supplied directory into the current  buffer in dired format AReturns a tuple containing the textual region (the end of) which  is used for click( detection and the FilePath of the file $ represented by that textual region Return 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. 9Removes mark from current file (if any) and moves in the  specified direction. Fmove selected files in a given directory to the target location given  by user input if 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 1 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 Fcopy selected files in a given directory to the target location given  by user input 6askCopyFiles follow the same logic as askRenameFiles, 3 except dir and file are done by different DiredOP BExtract the filename at point. NB this may fail if the buffer has ) been edited. Maybe use Markers instead. t                           ! " # $ %t & ' ( ) * + , - .uvw / 0 1 2 /universal argument, usually indicating whether  to mark or unmark. Here Just  &  is taken as  unmark.  Picks which entries to consider ,Character used for marking. Pass garbage if  unmarking. 3 4 5 6 7 %Direction to move in after unmarking 8 9 : ; < = > ? @ A BtuvwuvwtF                            $ # " !   % % % % % % %t & ' ( ) * + , - .uvw / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B<portable experimentalyi-devel@googlegroups.comNone x Tries to open a new buffer with t and runs the given - action on the buffer handle if it succeeds. If the t- fails, just the failure message is printed. y+Revert to the contents of the file on disk z'Try to write a file in the manner of vi/vim 6 Need to catch any exception to avoid losing bindings {0Try to write to a named file in the manner of vi/vim |(Try to write to a named file if it doesn't exist. Error out if it does. }GWrite 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 buffers Make a backup copy of file >Associate buffer with file; canonicalize the given path name. 6Checks 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. C3Is there a proper file associated with the buffer? 9 In other words, does it make sense to offer to save it? xyz{|}~ C txyz{|}~ txz{|}~y xyz{|}~ C=portable experimentalyi-devel@googlegroups.comNone1Config variable for customising the behaviour of   and . Set this variable using . See  and  finiteListEvaluator for two implementation. implementation of  implementation of  )Runs the action, as written by the user. BThe behaviour of this function can be customised by modifying the   variable. ,Lists the action names in scope, for use by . BThe behaviour of this function can be customised by modifying the   variable. The evaluator to use for  and  . 3Accessor for the published actions. Consider using  . APublish the given action, by the given name. This will overwrite ( any existing actions by the same name. @Evaluator based on a fixed list of published actions. Has a few  differences from :  expressions can't be evaluated + all suggested actions are actually valued  (related to the above) doesn'$t contain junk actions from Prelude  doesn',t require GHCi backend, so uses less memory -Jumps to specified position in a given file. D(Regex parsing the error message format. E(Parses an error message. Fails if it can't parse out the needed > information, namely filename, line number and column number. F6Tries to parse an error message at current line using   E. 0Tries to jump to error at the current line. See   F. GTries to strip the  H from the front of the given  <. > If the prompt is not found, returns the input command as-is.  I J K L M N O P Q R SFilename to make the jump in. Line to jump to. Column to jump to. D E F H G T I J K L M N O P Q R S D E F H G T>portable experimentalyi-devel@googlegroups.comNone;Insert the list at current point, extending size of buffer ;Insert the char at current point, extending size of buffer U deleteNAt n p deletes n# characters forwards from position p  U    = > ? @ A B C D E F G H I J   !"#$%&'()*+,789:;wxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~      !"#$%&'()*+,-./0123456789;<=>?@ABCDEFGHIJKLMN  U?portable experimentalyi-devel@googlegroups.comNone"for repeat and potentially macros "see Yi.Keymap.Vim.vimEval comment 9is set on $, allows j and k walk the right edge of lines like vim's :help paste after C-o and one of v, V, C-v  after C-o -char denotes how state got into insert mode (i, a, etc.) I V W X Y Z [ \ ] ^ _ ` a b c d>> V W X Y Z [  \ ] ^ _ ` a b c d@portable experimentalyi-devel@googlegroups.comNone e f g h e f g hAportable experimentalyi-devel@googlegroups.comNoneBportable experimentalyi-devel@googlegroups.comNoneCportable experimentalyi-devel@googlegroups.comNone% 'a,'b  i   iDportable experimentalyi-devel@googlegroups.comNone j jEportable experimentalyi-devel@googlegroups.comNonefrom 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: } 3 moves to the first line after a paragraph, but d} will not  include that line. B If the motion is exclusive, the end of the motion is in column 1 E and the start of the motion was at or before the first non-blank < in the line, the motion becomes linewise. Example: If a 1 paragraph begins with some blanks and you do d} while standing ? on the first non-blank, all the lines of the paragraph are D deleted, including the blanks. If you do a put now, the deleted 6 lines will be inserted below the cursor position.  TODO: case 2 Fportable experimentalyi-devel@googlegroups.comNone    k l m n o p q r s t u v                k l m n o p q r s t u vGportable experimentalyi-devel@googlegroups.comNone%All impure bindings will be ignored.  w x y z w x y zHportable experimentalyi-devel@googlegroups.comNone { | } ~   { | } ~  Iportable experimentalyi-devel@googlegroups.comNone  Jportable experimentalyi-devel@googlegroups.comNone  KNone  !"#$% &'  !"#$%&'"# !%$&'  !"#$% &' Lportable experimentalyi-devel@googlegroups.comNone()*+,-./012 3 4 ()*+,-./01234 ()*+,01/2-3.4 ()*+,-./012 3 4Mportable experimentalyi-devel@googlegroups.comNone like dd and d2vd )TODO: should this String be EventString? 5 55  5 Nportable experimentalyi-devel@googlegroups.comNone  Creates a 6 from a   and a function that  turns tokens into  . 8Specialised version of   for the common case,  wrapping up into a   with  . Determines if the file'2s extension is one of the extensions in the list. J.When applied to an extensions list, creates a  function. KKWhen applied to an extensions list and regular expression pattern, creates  a  function. L,Adds a hook to all matching hooks in a list M1Apply a list of mode hooks to a list of AnyModes NBCheck whether a mode of the same name is already in modeTable and % returns the original mode, if it isn' t the case.  67 8Starting state 9:;<=>?@ABCDEFGHI JList of extensions Path to compare against (File contents. Currently unused but see  K. KLMN6789:;<=>?@ABCDEFGHIJKLMN67:;<=>AHGBDEFJK8@LMNI?C9 67 89:;<=>?@ABCDEFGHI JKLMNOportable experimentalyi-devel@googlegroups.comNoneOPQOPQOPQOPQPportable experimentalyi-devel@googlegroups.comNoneSsyntax-based latex mode Tsyntax-based latex mode  RST RSTTSR RST Qportable experimentalyi-devel@googlegroups.comNoneUUUURportable experimentalyi-devel@googlegroups.comNoneXTODO: we'(re just converting back and forth here,  3 and friends need to migrate to YiString it seems. ^2Open a new buffer for interaction with a process. _<open a new buffer for interaction with a process, using any  interactive-derived mode `%Send the type command to the process aSend command, recieve reply VWXYZ[\]^_`a VWXYZ[\]^_`a VWXYZ[\]^_`a VWXYZ[\]^_`aSportable experimentalyi-devel@googlegroups.comNonee2Changing the buffer name quite useful if you have @ several the same. This also breaks the relation with the file. f#shell-command with argument prompt g$shell-command with a known argument hcabal-configure kKRun the given commands with args and pipe the ouput into the build buffer, $ which is shown in an other window. o cabal-build r(Search the source files in the project. sPerform a find+grep operation bcdefghijklmnopqrs bcdefghijklmnopqrsefgbcdhijklmnopqrsbcdefghijklmnopqrs Tportable experimentalyi-devel@googlegroups.comNonexStart Abella in a buffer y Return Abella'"s buffer; create it if necessary.  Show it in another window. zSend a command to Abella  t uv w xyz tuvwxyztxuvwyz  t uv w xyz Uportable experimentalyi-devel@googlegroups.comNone|Hooks for the JavaScript mode. The  compiler. :Returns the JS verifier buffer, creating it if necessary. +Creates a new empty buffer and returns it. ?Given a filename, a BufferRef and a list of errors, prints the  errors in that buffer. { | {|{|  { | Vportable experimentalyi-devel@googlegroups.comNone} }}} Wportable experimentalyi-devel@googlegroups.comNone~=Remove anything starting with uppercase letter. These denote  either module names or types. Hoogle':s output includes a sort of type keyword, telling whether B 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. CQuery Hoogle, with given search and options. This errors out on no 2 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 ', and overwrite the word at point with  the first returned function.  Call out to 1, and print inside the Minibuffer the results of * searching Hoogle with the word at point. ~~~~Xportable experimentalyi-devel@googlegroups.comNone2Align 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. X Returns the region extended to lines, plus the start and end columns of the rectangle. #Split text at the boundaries given    Yportable experimentalyi-devel@googlegroups.comNone4Quits 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 B 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. 4Quits 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 :Convert the universal argument to a number of repetitions =Finds file and runs specified action on the resulting buffer BOpen 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. FPrompts the user for a buffer name and switches to the chosen buffer. @Prompts the user for a buffer name and kills the chosen buffer. A 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 UniversalArgument).  If we aren'9t looking at a separator, insert a single space. This is & like emacs just-one-space  but doesn't deal with negative argument C case but works with other separators than just space. What counts  as a separator is decided by  modulo n character. DFurther, it will only reduce a single type of separator at once: if E we have hard tabs followed by spaces, we are able to reduce one and  not the other. 4Join this line to previous (or next N if universal) ;Shortcut to use a default list when a blank list is given. * Used for default values to emacs queries 8Prompt the user to give a tag and then jump to that tag Opens the file that contains tag(. Uses the global tag table and prompts + the user to open one if it does not exist Call continuation act* with the TagTable. Uses the global table ! and prompts the user if it doesn't exist ACounts the number of lines, words and characters inside selected  region. Coresponds to emacs' count-words-region. !    Prompt &Action to run on the resulting buffer   VlhjoVhojl!      Zportable experimentalyi-devel@googlegroups.comNoneAIntroduce a keymap that is compatible with both windows and osx, > by parameterising the event modifier required for commands     [portable experimentalyi-devel@googlegroups.comNoneC-w  This is like kill-region-or-backward-word. C-k Kill the rest of line C-y M-w M-y C-M-w \portable experimentalyi-devel@googlegroups.comNone>Retrieve buffer list and open a them in buffer mode using the   . @Switch to the buffer with name at current name. If it it starts  with a / then assume it'&s a file and try to open it that way.   ]portable experimentalyi-devel@googlegroups.comNone Word completion Awhen doing keyword completion, we need to keep track of the word  we're trying to complete. Switch out of completion mode. HTry to complete the current word with occurences found elsewhere in the * editor. Further calls try other options.  Extract function Source function Message function Predicate matcher      ^portable experimentalyi-devel@googlegroups.comNone Wrapper around  , which also cancels incremental search. See  issue #499 for details.     _portable experimentalyi-devel@googlegroups.comNone    `portable experimentalyi-devel@googlegroups.comNone "Show an error on the status line. HShow 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 :Quoted arg with char delim. Allows same escapes, but doesn't require escaping S of the opposite kind or space. However, it does allow escaping opposite kind like K 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.          aportable experimentalyi-devel@googlegroups.comNone  bportable experimentalyi-devel@googlegroups.comNonecportable experimentalyi-devel@googlegroups.comNone  dportable experimentalyi-devel@googlegroups.comNoneeportable experimentalyi-devel@googlegroups.comNonefportable experimentalyi-devel@googlegroups.comNone  gportable experimentalyi-devel@googlegroups.comNonehportable experimentalyi-devel@googlegroups.comNoneiportable experimentalyi-devel@googlegroups.comNone  jportable experimentalyi-devel@googlegroups.comNone  kportable experimentalyi-devel@googlegroups.comNone  lportable experimentalyi-devel@googlegroups.comNonemportable experimentalyi-devel@googlegroups.comNonenportable experimentalyi-devel@googlegroups.comNone  oportable experimentalyi-devel@googlegroups.comNone  pportable experimentalyi-devel@googlegroups.comNone      qportable experimentalyi-devel@googlegroups.comNonerportable experimentalyi-devel@googlegroups.comNone List of tags and the filelinechar that they originate from. 5 (the location that :tag or Ctrl-[ was called from). ;Returns tag, tag index, filepath, line number, char number Push tag at index. JGet tag and decrement index (so that when a new push is done, the current  tag is popped) Opens the file that contains tag$. Uses the global tag table or uses  the first valid tag file in  TagsFileList. Goes to the next tag. (:tnext) .Return to location from before last tag jump. =Go to next tag in the tag stack. Represents :tag without any  specified tag. "Gets the first valid tags file in  TagsFileList, if such a valid  file exists. Handles paths of the form ./[path](, which represents a tags file relative J to the path of the current directory of a file rather than the directory  of the process. Call continuation act* with the TagTable. Uses the global table  or, if it doesn'*t exist, uses the first valid tag file in   TagsFileList.                       sportable experimentalyi-devel@googlegroups.comNone             ! " # $ % & ' ( ) * + , - . / 0             ! " # $ % & ' ( ) * + , - . / 0tportable experimentalyi-devel@googlegroups.comNone 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A Buportable experimentalyi-devel@googlegroups.comNone C D E F C D E Fvportable experimentalyi-devel@googlegroups.comNone  wportable experimentalyi-devel@googlegroups.comNone GTODO: verify whether  H works fine here in place of  split's  splitWhen*. If something breaks then you should use   splitWhen + 'T.pack'/'T.unpack'.  I G J K L M N O P Q R S  I G J K L M N O P Q R Sxportable experimentalyi-devel@googlegroups.comNone T U V W X Y Z()*+()*+ T U V W X Y Zyportable experimentalyi-devel@googlegroups.comNone'The process name to use to spawn GHCi. #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 < key to go + just before the prompt through the use of . #The GHCi prompt always begins with >; this goes to just before B 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.)  Spawns an interactive process (Yi.Mode.Interactive ) with GHCi   over it. \Setting this is a bit like '(setq haskell-program-name foo)' in  emacs'  haskell-mode.  [ ] Command to use. Process args. !Reference to the spawned buffer. \    [ ] \zportable experimentalyi-devel@googlegroups.comNone ^<Variable storing the possibe buffer reference where GHCi is  currently running.  -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 9 Haskell hackers so it should be fine, at least for now.  Clever0 haskell mode, using the paren-matching syntax. IExperimental Haskell mode, using a rather precise parser for the syntax. _8Returns true if the token should be indented to look as inside  the group. `Start GHCi in a buffer  Return GHCi'"s buffer; create it if necessary.  Show it in another window. Send a command to GHCi Load current buffer in GHCi & ^ a b c     d e f g h i j _ k l m n o p q r s t u v ` w x          $ ^ a b c     d e f g h i j _ k l m n o p q r s t u v ` w x{portable experimentalyi-devel@googlegroups.comNone$ !"#$%&'()*+,-./012345678$ !"#$%&'()*+,-./012345678$ !"#$%&'()*+,-./012345678  !"#$%&'()*+,-./012345678|portable experimentalyi-devel@googlegroups.comNoneo;Convert snippet description list into a SuperTab extension D9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop y z { | } ~  89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop=D@CBA9=;:>?>?<>?<LMNIJKOPQRSGHTUVWXYZ[\]^_`abcdefghijklmEFnop59 =;:>?>?<>?<@CBADEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop y z { | } ~  }portable experimentalyi-devel@googlegroups.comNoneqrqrqrqr~portable experimentalyi-devel@googlegroups.comNoneu;Turn a sequence of (from,style,to) strokes into a sequence : of picture points (from,style), taking special care to B ensure that the points are strictly increasing and introducing & padding segments where neccessary. : Precondition: Strokes are ordered and not overlapping. v=Paint the given stroke-picture on top of an existing picture z0Arrange 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 stuvwxyz{ stuvwxyz{ stuvwxyz{ stuvwxyz{None|}~   |}~|}~ |}~   portable experimentalyi-devel@googlegroups.comNone?A TabDescr describes the properties of a UI tab independent of  the particular GUI in use. portable experimentalyi-devel@googlegroups.comNone Apply the attributes in sty and changes to cs . If the  attributes are not used, sty and changes are not evaluated.   /The height of the part of the window we are in .The width of the part of the window we are in 8The number of spaces to represent a tab character with. The data to draw.     None List of published Actions 6Input preprocessor: Transform Esc;Char into Meta-Char  Useful for emacs lovers ;) 6Open an emacs-like scratch buffer if no file is open.        None #Argument parsing. Pretty standard. HConfiguration information which can be set in the command-line, but not  in the user's configuration file. 3List of editors for which we provide an emulation. usage string. usage string. "Transform the config with options AUpdate the default configuration based on a command-line option. <Static main. This is the front end to the statically linked 2 application, and the real front end, in a sense.  dynamic_main calls = this after setting preferences passed from the boot loader.          portable experimentalyi-devel@googlegroups.comNone BOnce 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. BThe 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'2s configuration. The yi executable uses a default  config. CPP-guarded profiling params.     portable experimentalyi-devel@googlegroups.comNone":Starts with the given initial config, makes the described  modifications, then starts yi. ?Sets the frontend to the first frontend from the list which is  installed. %Available frontends are a subset of: "vty", "pango", and  "batch". 'Sets the frontend, if it is available. #Adds the given key bindings to the ` global keymap'. The bindings 9 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. =Register 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 E 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  $ for default.   the font size, or  $ for default. 7Amount to move the buffer when using the scroll wheel.   the scroll style, or  $ for default. See L for documentation. )Which side to display the scroll bar on.  Should the scroll bar autohide? Should the tab bar autohide? Should lines be wrapped? =The character with which to fill empty window space. Usually  '~' for vi-like editors, ' ' for everything else. UI colour theme. BList of registered layout managers. When cycling through layouts,  this list will be consulted. 3Produce a .yi.dbg file with debugging information? >Run when the editor is started (this is run after all actions % which have already been registered) List version of . ARun 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. 7Actions to run after startup or reload. Consider using   or   instead. Default keymap to use. ? 5List of modes by order of preference. Consider using ,  , or  instead. Set to 90 for an emacs-like behaviour. Consider starting  with , , or   to instead. Set to  5 for an emacs-like behaviour, where all deleted text 6 is accumulated in a killring. Consider starting with  , , or   instead. ? (       = > ? @ A B C D E F G H I J L         -./0123456789:;<=>?@ABCDEFGHIJKklmnopqrstuvwxyz{|}~     !"#$%&'()*+,789:;<LMNOPR`abcdefghijklmnopqrstwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNSTXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456:;<=>?@ABCDEFGHRefghijklmnopqrstuvwxyz{|}~    2TS   LPONM&   portable experimentalyi-devel@googlegroups.comNone      = > ? @ A B C D E F G H I J L         -./0123456789:;<=>?@ABCDEFGHIJK  !"#$%&'()*+,789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456:;<=>?@ABCDEFGHRefghijklmnopqrstuvwxyz{|}~PQ                                           !"#$%&'()*+,-./00123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~      ! "#"$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoppqrstuvwxyz{|}~!!!!!!!!!!""""""""""################################################################################################################################# # # # # # ######################## #!#"###$#%#&#'#(#)#*#+#,#-$.$/$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%QRSTUVWXYZ[\]^_`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){)|)})~))))))))))))))))***********+++,-----............................................................................./////////////////// / 0 0 0 111H11111111111111111 2!2"2#2$2%2&2'2(2)2*2+2,2-2.2/202122232425364748494:4;4<4=4%4>4?4@4A4B4C4D4E4F5G5H6I6I6J6K6L6M6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z6[\]^_`abcdefghijklmnopqrstuvwxyz7{7|7}8~888888888888889999999999999999999999999999:::::::::::::::;;;;<<<<<<<<<<<<==============>>>>>>O>>?????????????????????????????????????x?????????????????????@@ @ @ @ @ AAAAAAAAAAAAAAAAAAA A!A"A#A$B%C&C'C(C)C*C*C+C,C-C.C/C0D1D2E3E3E4E5E6F7F7F8F8F9F:F;F<F=F>G?G@GAGBGCGDGEGFGGGHGIGJGKHLIMJNJOKPKPKQKQKRKSKTKULVLVLWLXLYLZL[L\L]L^L_L`LaMbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzN{O|O}O~PPPQRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSTTTTTTTUUVWWWWWWWXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYZZZZZZZ[[[[[[[[\]]]]]]]]]]^^^^^^^^^_````````````````abcdefghijklmnopqrrrrrstuvwx x x x x x xxxxxxxxyyyyyyyyyzzzzzz z!z"z#z$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|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|{|||}|~}}~~~~~~~~~]]          !"#$ % & ' ( ) * + , -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRGSTUVWWNOPQRXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~qGDGGG GS                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 67 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R SGH T U V W XZ 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 x y z { | } ~        ! ! ! ! ! ! !! !   # # # # # # # # # # # # # # % %o                                       ' ' '   ' ' ' ' ' ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) G  G  ) ) ) ) ) ) ) ) ) ) ) ) ) * * * * * * G !* "* #GS $ % & ' (   )  ) *  +  ,  -  -. . / 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. :. ;. <. =. >. ?. @. A. B. C. D. E. FDE GDE H I J K/ L/ M/ M/ N/ N/ O/ P/ Q/ R/ S/ T/ U/ V1 W1 X1 Y1 Z1 [ \ ] ^4 _4 `5 a5 b5 c5 d6 e6 f6 g6 h6 i j k l m m n o p q r s t u v7 w7 x7 y7 y7 z7 {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@ CC DD EF FF GF HF IF JF KF LF MF NF OF PF QG RG SG TG UH VH WH XH YH ZH [H \I ]I ^J _K `K aK bL cL dM eM fM gM hM iM jM kM lM mM ]M nM oN p q / r sN tN uP|P vS wT xT xT yT zT {T |T }T ~T U U U U U U U U U U V V V Y Y YY Y Y Y Y Y Y Y Z Z Z Z Z Z Z Z Z Z \ \ ] ] ] ] ] ] ] ] ] ] ] ^ ^ ^ ^ ^ _ V_ _ _ _ _ _ _ X_ Y_ _ `` ` ` ` ` ` ` a a a a c f f i j j k k k k k n o o p p p r r r r r r r r r r r r r r r r s s s s s s s s s s s s s s s s s s s s s s s s s s s s s t t ]t t t t t t t t t t t t t t t t u u u u w DE;w w w w w w w w w Xw w x x x x x x x y y y z z z z z !z "z #z $z %z &z 'z (z )z *z +z ,z -z .z /z 0z 1z 2z 3z 4z 5z 6z 7| 8| 9| :| ;| <| =| >| ?| @| A| B| C D E F G H H I J K L M N O P 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 uG  v w x y z { | } | ~ |  / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /   yi-0.11.0Yi.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.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.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.Shell$Yi.Keymap.Vim.Ex.Commands.Substitute Yi.Keymap.Vim.Ex.Commands.GlobalYi.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.CanonicalizePathSystem.FriendlyPathPaths_yiYi.Buffer.ImplementationIndentBehaviourMode modeAppliesYi mtl-2.2.1Control.Monad.State.Classgetsyi-language-0.1.0.8 Yi.Lexer.AlexstPosn lookedOffsetstLexer AlexStateYi.Regex SearchExp IgnoreCase NoNewLine QuoteRegex SearchOptionYi.Utils commonPrefixgreeksymbols checkAmbsdisamb subscripts superscriptsState layoutHandler MatchResult WholeMatch PartialMatchNoMatchcharFromDigraph 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 dummyWindowTabtkey 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 tokenToAnnoterrTokTT 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 errorTokenisErrortoTTfromTTReportWarnErrWarningUnreachableCodeMultipleFunctionDeclarationverifycheckMultipleFunscheckUnreachablettEqsayisReturn findFunctionsfunNamefunBodynameOf dropWhile'dupsBy ScrollStyle SingleLine SnapToCenter MarkValue markPoint markGravity markGravityAA markPointAAUpdateDeletedeleteUpdateStringInsert updatePointupdateDirectioninsertUpdateStringOverlayOvlLayer HintLayer UserLayerUIUpdate StyleUpdate TextUpdateupdateIsDelete mkOverlayChange AtomicChangeInteractivePointURListemptyU 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 preferColpendingUpdatesselectionStyle keymapProcesswinMarkslastActiveWindow lastSyncTimereadOnly insertingdirectoryContentpointFollowsWindowupdateTransactionInFlightupdateTransactionAccumfontsizeVariationencodingConverterNameMarkSetfromMarkinsMarkselMarkWinMarksFBufferbmoderawbuf attributesIndentSettings expandTabstabSize shiftWidthBufferM fromBufferM KeymapSet topKeymap insertKeymapYiMrunYiMYiVaryiEditoryiSubprocessIdSupplyyiSubprocessesyiUiyiInputyiOutputyiConfigyiVarIsRefreshNeededNoNeedToRefresh MustRefresh KeymapProcess KeymapEndoKeymapKeymapMInteractYiConfigVariable YiVariableActionBufferAEditorAYiA emptyActionunsafeWithEditorextractTopKeymap runEditorbufferUpdateHandlerA&configCheckExternalChangesObsessivelyAconfigInputPreprocessAconfigKillringAccumulateAconfigRegionStyleA configUIA configVarsA debugModeA defaultKmAinitialActionsAlayoutManagersA modeTableA startActionsAstartFrontEndAconfigAutoHideScrollBarAconfigAutoHideTabBarAconfigCursorStyleAconfigFontNameAconfigFontSizeAconfigLeftSideScrollBarAconfigLineWrapAconfigScrollStyleAconfigScrollWheelAmountA configThemeA configVtyAconfigWindowFillAconfigVariable getConfigDir getDataPath getConfigPathgetCustomConfigPathgetConfigFilenamegetConfigModulesgetArticleDbFilenamegetPersistentStateFilenamegetEvaluatorContextFilenamedirectoryContentAencodingConverterNameAfontsizeVariationAidentA insertingAkeymapProcessAlastActiveWindowA lastSyncTimeApendingUpdatesApointFollowsWindowA preferColA readOnlyAundosAshortIdentString identStringminiIdentString clearSyntaxfilehighlightSelectionArectangleSelectionAincreaseFontSizedecreaseFontSize getModeLine getPercent addOverlayB delOverlayBdelOverlayLayerB runBuffergetMarks runBufferFull getMarkValueBnewMarkB deleteMarkBrunBufferDummyWindow markSavedBbkeyisUnchangedBufferstartUpdateTransactionBcommitUpdateTransactionBundoBredoBmodeAlwaysAppliesmodeNeverApplies emptyModenewBsizeBpointBnelemsBstreamBindexedStreamBstrokesRangesBmoveTo setInserting applyUpdaterevertPendingUpdatesBwriteBwriteNnewlineB insertNAtinsertNinsertB deleteNAtcurLn markLinesgotoLnsetMode0 setAnyModesetMode modifyModeonMode withMode0 withModeB withSyntaxB focusSyntax withSyntaxB' regexRegionBregexB modifyMarkB setMarkHereBsetNamedMarkHereBsetVisibleSelectionaskMarksgetMarkB mayGetMarkBmoveNleftBleftNrightBrightN lineMoveRelmovingToPrefCol moveToColBmoveToLineColBpointOfLineColBforgetPreferCol savingPrefCollineUplineDownelemsBbetweenBreadBreadAtB replaceCharBreplaceCharWithBelowBreplaceCharWithAboveBinsertCharWithBelowBinsertCharWithAboveBdeleteNindentSettingsBcurColcolOflineOf lineCountB solPointB eolPointB gotoLnFrom getBufferDyn putBufferDynsavingExcursionB markPointA savingPointBsavingPositionBpointAtpointAfterCursorBdestinationOfMoveB askWindowwithEveryLineB expandTabsA shiftWidthAtabSizeAmodeAdjustBlockA modeAppliesA modeFollowAmodeGetStrokesAmodeHLA 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 moveToSol moveToEoltopBbotB leftOnEol moveXorSol moveXorEol nextWordB prevWordBgotoCharacterBnextCInLineIncnextCInLineExcprevCInLineIncprevCInLineExcfirstNonSpaceB lastNonSpaceBmoveNonspaceOrSolisCurrentLineEmptyBisCurrentLineAllWhiteSpaceBnextNParagraphsprevNParagraphsatSolatEolatEof atLastLine getLineAndColgetLineAndColOfPointreadLnBhasWhiteSpaceBeforereadCurrentWordB readPrevWordBbdeleteB killWordB bkillWordB bdeleteLineBdeleteHorizontalSpaceBuppercaseWordBlowercaseWordBcapitaliseWordBswitchCaseChar deleteToEolswapBdeleteTrailingSpaceBsetSelectionMarkPointBgetSelectionMarkPointBexchangePointAndMarkB getBookmarkBbufInfoB upScreensB downScreensB upScreenB downScreenBscrollScreensB vimScrollB vimScrollByBscrollToCursorBscrollCursorToTopBscrollCursorToBottomBscrollBscrollToLineAboveWindowBscrollToLineBelowWindowBsnapInsB snapScreenB downFromTosB upFromBosBmiddleBgetRawestSelectRegionBgetSelectRegionBsetSelectRegionBdeleteBlankLinesB lineStreamB getNextLineBgetNextNonBlankLineBmodifyExtendedSelectionBlinePrefixSelectionBunLineCommentSelectionBtoggleCommentBreplaceBufferContent fillParagraph sortLinesrevertBshapeOfBlockRegionBleftEdgesOfRegionBrightEdgesOfRegionB'splitBlockRegionToContiguousSubRegionsBdeleteRegionWithStyleBreadRegionRopeWithStyleBinsertRopeWithStyleBflipRectangleBmovePercentageFileBfindMatchingPairBincrementNextNumberByB isNumberB test3CharBtestHexBtabB autoIndentB cycleIndentsB indentOfB indentToBindentAsPreviousB indentAsNextB$indentAsTheMostIndentedNeighborLineBnewlineAndIndentBshiftIndentOfRegionBindentOfCurrentPosB configStyleconfigFundamentalModeconfigTopLevelKeymapstartFieldConfigM runConfigMcustomVariable emptyEditorbuffersA currentRegexA killringApendingEventsAsearchDirectionA 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_unTagmkTagunTag' lookupTagimportTagTablehintTags completeTagsetTags resetTagsgetTagssetTagsFileListgetTagsFileList setRegexE resetRegexE getRegexEYiAction makeActionwithUI readEditor catchDynE catchJustE handleJustE insertKeymapA topKeymapAmodelessKeymapSet withModeY yiEditorAyiSubprocessIdSupplyAyiSubprocessesA yiConfigAyiInputA yiOutputAyiUiAyiVarA printableChartextCharpStringcharOfshiftctrlmetasuperhypercharctrlChmetaChhyperChoptModspec>>!>>=!?>>?>>!?*>>?*>>!reload ArticleDBADBunADBArticlesplitgetLatestArticle removeSetLast insertArticlewriteDBreadDBoldDbNewArticlesetDisplayedArticle nextArticledeleteAndNextArticlesaveAndNextArticlesaveAsNewArticleHookTyperunHookHistory_historyCurrent_historyContents_historyPrefix HistoriesdynKeyA miniBuffer historyUp historyDown historyStarthistoryStartGen historyFinishhistoryFinishGen historyFind historyMovehistoryMoveGenhistoryPrefixSethistoryPrefixSet' setHistory SearchResult SearchWrappedPatternNotFound PatternFound SearchMatchdoSearch searchInitcontinueSearchsearchReplaceRegionBsearchReplaceSelectionB replaceStringsearchAndRepRegion0searchAndRepRegionsearchAndRepUnit isearchInitEisearchIsEmpty isearchAddEmakeSimpleSearch isearchDelEisearchHistory isearchPrevE isearchNextE isearchWordEisearchFinishEisearchCancelEisearchFinishWithEisearchCancelWithEqrNext qrReplaceAllqrFinish qrReplaceOnemaxHistoryEntriessavePersistentStateloadPersistentState startEditor forkAction quitEditorfocusAllSyntax refreshEditor suspendEditorrunProcessWithInput runAction errorEditor closeWindowcloseWindowEmacsstartSubprocess sendToProcess withSyntaxCommandArgumentsFilePatternTagRegexTagToKill LineNumber:::DocfromDocdebugBufferContentpromptingForBuffer commentRegionspawnMinibufferEwithMinibuffer mkCompleteFnsimpleCompleteinfixComplete' infixCompletenoHintnoPossibilitieswithMinibufferFreewithMinibufferGenwithMinibufferFin anyModeNameanyModeByNameM anyModeByNamegetAllModeNamesmatchingBufferNamesgetAppropriateFiles getFoldermatchingFileNames placeMark selectAlladjBlock adjIndent promptFilepromptFileChangingHints matchFile completeFilecdpwd rot13CharprintFileInfoEeditFiledireddiredDirdiredDirBufferopeningNewFilerevertEviWrite viWriteTo viSafeWriteTofwriteE fwriteBufferE fwriteToE fwriteAllEbackupE setFileName deservesSave EvaluatorexecEditorActionImplgetAllNamesInScopeImplexecEditorActiongetAllNamesInScope evaluator ghciEvaluatorpublishedActions publishActionpublishedActionsEvaluatorjumpToE jumpToErrorE consoleKeymap OperatorNameOp_unOp EventStringEv_unEvunEvVimStatevsModevsCount vsAccumulatorvsTextObjectAccumulator vsRegisterMapvsActiveRegistervsRepeatableActionvsStringToEval vsStickyEolvsOngoingInsertEventsvsLastGotoCharCommandvsBindingAccumulatorvsSecondaryCursorsvsPastevsCurrentMacroRecordingGotoCharCommandVimModeSearch previousMode directionExVisual InsertVisual InsertNormalReplaceSingleCharReplaceNormalOperatorPendingNormalRegisterregRegionStyle regContentRepeatableActionraPreviousCountraActionString RegisterNameunOplookupBestMatch matchesString VimBinding VimBindingE VimBindingY RepeatTokenContinueDropFinish stringToEventeventToEventString parseEventsstringToRepeatableActionsplitCountedCommandnormalizeCount switchMode switchModeE modifyStateE resetCount resetCountEgetMaybeCountE getCountE setCountEaccumulateBindingEventEaccumulateEventEaccumulateTextObjectEventEflushAccumulatorEdropAccumulatorEdropBindingAccumulatorEdropTextObjectAccumulatorE getRegisterE setRegisterEnormalizeCountE maybeMult setStickyEolEupdateModeIndicatorEsaveInsertEventStringEresetActiveRegisterEscheduleActionStringForEval LineRangeCurrentLineRange FullRange MarkRange ExCommand cmdComplete cmdIsPure cmdActioncmdAcceptsRangecmdShowevStringToExCommandexEvalEexEvalY StyledRegionnormalizeRegiontransformCharactersInRegionBtransformCharactersInLineN CountedMoveMove moveStyle moveIsJump moveAction stringToMovechangeMoveStyle regionOfMoveBmkStringBindingEmkStringBindingY mkBindingE mkBindingYselectPureBinding selectBinding matchFromBooladdVimJumpHereEmkMotionBindingmkChooseRegisterBindingindentBlockRegionBpasteInclusiveBaddNewLineIfNecessary defReplaceMapdefReplaceSingleMap doVimSearchcontinueVimSearchCountedTextObject TextObjectchangeTextObjectCountregionOfTextObjectBchangeTextObjectStylestringToTextObject VimOperator operatorNameoperatorApplyToRegionE defOperatorsstringToOperatoroperatorApplyToTextObjectEopYankopDeleteopChangeopFormatmkCharTransformOperatorlastCharForOperatordefNormalOperatorPendingMapTokenBasedModefundamentalModelinearSyntaxMode styleModecModeobjectiveCModecppMode cabalModesrmcMode gitCommitMode svnCommitMode ocamlModeperlModerubyMode pythonModejavaModejsonMode gnuMakeModeottModewhitespaceMode anyExtensionextensionOrContentsMatch hookModesapplyModeHooks lookupModeabstract ireaderMode ireadModefastMode latexMode2 latexMode3mode interactIdinteractHistoryMoveinteractHistoryFinishinteractHistoryStartgetInputRegiongetInputsetInput spawnProcessspawnProcessMode feedCommand queryReply CabalBuffer cabalBufferchangeBufferNameE shellCommandE shellCommandVcabalConfigureE configureExitreloadProjectEbuildRun makeBuildcabalRunmakeRun cabalBuildE makeBuildEshell searchSourcesgrepFindabellaModeEmacs 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 defInsertMap OptionActionAskInvertSetparseWithBangAndCount parseWithBang parseRange parseOptionfilenameComplete forAllBuffers pureExCommandimpureExCommand errorNoWrite commandArgs needsSavinggotoTagnextTagpopTagunpopTagcompleteVimTag defNormalMap defVisualMapdefExCommandParsersdefExMap VimConfig vimKeymap vimBindings vimOperatorsvimExCommandParsers vimDigraphs vimRelayout mkKeymapSet keymapSet defVimConfigpureEval impureEvalrelayoutFromToGhciProcessName_ghciProcessName_ghciProcessArgsghciProcessArgsghciProcessNamehomeKeyhaskellAbstract cleverMode literateMode preciseModeghciGetghciSendghciLoadBuffer ghciInferTypeghciSetProcessNameghciSetProcessArgs QueuedUpdate qUpdatePointqInsertqDelete dollarifydollarifyWithinrunQ openParen closeParen isNormalParenisTuple queueDeletequeueReplaceWith stripComments dollarifyTop dollarifyExprisSimple isCollapsible selectedTreefindLargestWithinwithinsafeLast dollarifyPdollarifyWithinPisNormalParenPisTuplePstripCommentsP dollarifyTopPdollarifyExprP isSimplePisCollapsibleP selectedTreePfindLargestWithinPwithinP safeLastPMarkInfoDependentMarkInfoValuedMarkInfoendMarkSimpleMarkInfo userIndex startMark SnippetMark DependentMark ValuedMark SimpleMark SnippetCmd SupertabExtSupertab MkSnippetCmd mkSnippetCmdDependentMarksmarks BufferMarks bufferMarkscursor cursorWithdepisDependentMark bufferMarkersmkMarktext&&> runSnippetupdateUpdatedMarksfindEditedMarksdependentSiblingsupdateDependentsupdateDependents'markText setMarkTextwithSimpleRegion markRegionsafeMarkRegion adjMarkRegionfindOverlappingMarksWithfindOverlappingMarksregionsOverlappingMarksoverlappingMarksallOverlappingMarksdependentOverlappingMarksnextBufferMarkisDependentMarkersafeDeleteMarkBmoveToNextBufferMarksuperTab fromSnippetssnippet 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 BlockOpenIndentisParenmaxPosn$fShowMatchResult$fAlternativeMatchResult$fApplicativeMatchResultshow' compareBy mergeTrees'$fShowCompletionTreeStepsbetterevalR'iBestfeedpushSymspushEof mkProcessrunProcessZipRPolishRStopRAppRPushLogEntryLSLSuspLFailLDoneLShiftLDislikeLEmptyLLogProfile:>PResPFailPSuspFailLogDislikeBestSusSh'ShiftDoneAppValDisjEmptShifBindApplPure:<top_restfirstsecond***mapSuccdislikeThreshold+>rightLogprofile countWidthapplytoQtoPfeedZevalLevalL'evalRPsimplifyevalRfullLogonRight $fShowZip $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParser $fShowRPolish $fShowSteps remapChar ctrlLowcasesetMetametaBit $fShowEvent $fOrdEventmodifyJumpList $fShowJump $fBinaryJumppush _krAccumulate _krLastYank$fBinaryKillring krAccumulatemaxDepth$fBinaryNonEmpty dbgHandlelogStreamThread-? DelayListinsertdecreaseignoringExceptionprintingException orException normalisePathcanonicalizePath expandSym makeAbsolute combinePath splitPath text-1.2.0.0 Data.TextfilterbaseGHC.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 getSysconfDirgetDataFileNamemodifyshellCommandSwitch read_chunk pushEvent findWritesPriorWriteGetPlusPriorityWritesFailsGetsBindsReturns pullWrites$fShowP$fMonoidInteractState$fMonadInteractIwevent $fMonadPlusI$fMonadI$fAlternativeI$fApplicativeI $fFunctorI$fMonadInteractStateTwe $fEqWindow $fShowWindow$fBinaryWindow tabWindowstabLayoutManager buildLayout$fEqTab relayoutIfrelayout $fShowTab $fBinaryTabGHC.ShowshowData.Text.InternalText Text.Readreadyi-rope-0.6.0.0Yi.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'subTree $fIsTreeTreepModulepModBodypEmptyBLpBodypVarIdpQvaridpQvarsym 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$fStrokableStatement$fStrokableArray$fStrokableTok$fStrokableKeyValue$fStrokableParExpr$fStrokableParameters$fStrokableExpr$fStrokableVarDecAss$fStrokableBlock$fStrokableForContent$fFailableKeyValue$fFailableExpr$fFailableParExpr$fFailableParameters$fFailableVarDecAss$fFailableBlock$fFailableForContent$fIsTreeStatement dropWhile $fShowReport $fShowWarning $fShowErrormemhlCacheoverlays dirtyOffsetnewBI insertChars deleteCharsshiftMarkValuesizeBInelemsBIgetIndexedStream overlayUpdate addOverlayBI delOverlayBIstrokesRangesBI isValidUpdate applyUpdateIreverseUpdateIlineAtsolPoint eolPoint' solPoint' regexRegionBI modifyMarkBIgetMarkDefaultPosBI BufferImpl FBufferData markNames overlayLayer _overlayBegin _overlayEnd _overlayStyleHLStateMarks dummyHlState$fBinaryBufferImpl $fOrdOverlay $fEqOverlay$fBinaryMarkValue updateString updateSize$fBinaryUpdate mapOvlMarks getStreamdelOverlayLayercharsFromSolBI newMarkBIgetMarkValueBIdeleteMarkValueBI getMarkBI setSyntaxBI touchSyntax updateSyntaxgetAstfocusAst$fBinaryUIUpdateYi.Buffer.BasicMarkPointSizeBackwardForward DirectionundoInteractiveremIPaddIPundoUntilInteractiveasRedoSavedFilePoint$fBinaryChange$fBinaryURList GHC.TypesTrue$fYiVariableRegionStyle$fDefaultRegionStyle$fBinaryRegionStyle$fMonadEditorEditorM$fBinarySelectionStyle$fBinaryBufferId$fBinaryAttributes$fBinaryMarkSet $fEqFBuffer$fApplicativeBufferM$fMonadEditorYiM$fMonadStateEditorYiM $fShowAction $fEqActionappUserDataCondconst2YiString singletoncolMove $fBinaryMode HasAttributes attributesAbkey__AbufferDynamicAselectionStyleAupdateTransactionAccumAupdateTransactionInFlightA winMarksA queryRawbuf modifyRawbufqueryAndModifyRawbufdefaultModeLine queryBuffer modifyBufferqueryAndModify getMarksRawgetMarkValueRawundoRedoepochcheckRO modifyMode0 withSyntax0 modifyMarkRaw getInsMarkreplaceCharWithVerticalOffsetmaybeCharBelowBmaybeCharAboveBmaybeCharWithVerticalOffset$fBinaryFBuffer $fShowFBuffer$fHasAttributesFBuffer$fHasAttributesAttributesmodeGotoDeclarationA Yi.RegionregionsOverlap regionIsEmptyincludedRegion nearRegioninRegion emptyRegion mkSizeRegion mkRegion'mkRegion unionRegionintersectRegion regionSize fmapRegion regionLast regionFirst regionEnd regionStartregionDirectionRegion genBoundaryisEndOfSentencechecksFalsefirstTwo atBoundarydoUntilBisNlatViWordBoundaryatAnyViWordBoundaryatViWordBoundaryOnLineviWordCharTypeviWORDCharType atSepBoundary enclosingUnitnextCIncnextCExcprevCIncprevCExcatSof readRestOfLnBreadPreviousOfLnB prevPointB nextPointBswitchCaseCharBdeleteLineForward scrollByBindexOfSolAbovepointScreenRelPositiongetRawSelectRegionBextendSelectRegionBgetMaybeNextLineB Data.MaybeNothingMaybegetNextLineWhichBmodifySelectionBtoggleCommentSelectionBjustifySelectionWithTopB fillRegion increment RelPositionWithinBelowAbove goUnmatchedB readCharBpointInWindowBautoIndentHelperBfetchPreviousIndentsBlastOpenBracketHint spacingOfB rePadString countIndent GHC.UnicodeisSpace indentStringindentAsNeighborLineBString directionElim mayReverse reverseDirmarkId BufferRef fromPointfromSize unWindowRef WindowRefopenAllBuffersEYi.Style defaultStylenewZeroSizeWindowswitchToBufferOtherWindowEfixCurrentBufferA_fixCurrentWindowE withLMStackEonCloseBufferE$fBinaryEditor bufferStackAdynamicAmaxStatusHeightAonCloseActionsA refSupplyAtabs_A currentTabAnewRef newBufRef insertBuffer forceFold1 forceFoldTabs setTmpStatusacceptedInputsmodifyJumpListE isPrefixOf toCaseFold bestMatch filterMatches isSingleton readCTags TagsFileListTags $fBinaryTag$fDefaultTagsFileList $fDefaultTags $fBinaryTags$fBinaryTagTable$fYiVariableTagsFileList$fYiVariableTags$fBinaryTagsFileList$fYiActionAction()$fYiActionBufferMx$fYiActionEditorMx$fYiActionYiMx $fYiActionIOxbytestring-0.10.0.2Data.ByteString.Internal ByteString$fYiVariableArticleDB$fDefaultArticleDB runHookImpl$fHookType(->) $fHookTypeYiM$fHookTypeEditorM$fYiVariableHistories$fBinaryHistory$fDefaultHistory$fDefaultHistories$fBinaryHistoriesisearchEndWith isearchEndqrReplaceCurrentIsearchmap3 makeISearch isearchFunE isearchNext0 isearchNextiSearch$fYiVariableIsearch$fDefaultIsearch$fBinaryIsearch trimHistoriesreadPersistentStatePersistentState histories aKillring aCurrentRegexMaxHistoryEntries_unMaxHistoryEntries#$fYiConfigVariableMaxHistoryEntries$fDefaultMaxHistoryEntries$fBinaryPersistentStateunMaxHistoryEntries 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$fDefaultDiredOpState$fYiVariableDiredOpState$fBinaryDiredOpState DiredState DiredNoInfoDiredNamedPipeDiredCharacterDeviceDiredBlockDevice DiredSocket DiredSymLinkDiredDir DiredFile DiredFileInfo permStringnumLinksownergrp sizeInBytesmodificationTimeString diredOpForAll diredOpSucCntdiredCurrFileA diredEntriesAdiredFilePointsA diredMarksA diredNameColA diredPathA$fYiVariableDiredState$fDefaultDiredState$fBinaryDiredState$fBinaryDiredEntryDORename DOCopyDir DOCopyFile DORemoveDir DORemoveFile DRStringsDRFilesDRDatesDRSizesDRGroupsDROwnersDRLinksDRPermsundrsbypassReadOnly filenameColOfresetDiredOpStateincDiredOpSucCntgetDiredOpStatemodDiredOpState diredDoDeldiredDoMarkedDel diredKeymap modeStringshortCalendarTimeToString diredMark diredMarkDeldiredMarkSymlinksdiredMarkDirectoriesdiredToggleAllMarksdiredMarkWithChardiredRefreshMarkdiredUnmarkPathdiredUnmarkAll currentDir diredRename diredCopy diredLoadnoFileAtThisLine markedFiles diredUpDirdiredCreateDir$fBinaryDiredFileInfo isFileBuffer errorRegexparseErrorMessageparseErrorMessageB takeCommandpromptPublishedActions_publishedActions NamesCache$fDefaultPublishedActions$fYiVariableNamesCache$fDefaultNamesCache$fYiConfigVariableEvaluator$fDefaultEvaluator_publishedActionsA"$fYiConfigVariablePublishedActions$fBinaryOperatorName$fBinaryEventString$fMonoidOperatorName$fMonoidEventString$fIsStringOperatorName$fIsStringEventString MacroName$fBinaryRepeatableAction$fBinaryRegister$fDefaultVimMode$fBinaryGotoCharCommand$fDefaultVimState$fBinaryVimMode$fYiVariableVimState$fBinaryVimStatespecMap invSpecMapspecListstringToEvent'$fShowExCommand evalHelper lookupMovelinewiseMotionsexclusiveMotionsinclusiveMotionsrepeatregionOfMoveB' moveForwardB moveBackwardB gotoXOrEOFwithDefaultCountmatchGotoMarkMovematchGotoCharMove combineActionsetUnjumpMarks addVimJumpAtEtrailingNewlinespecialsexitReplaceMode printableprintableActioninsertOrReplaceBinsertOrReplaceCharWithBelowBinsertOrReplaceCharWithAboveB escBindingactualReplaceBinding regionFirst'textObjectRegionB'parseTextObjecttoOuter formatRegionBmkShiftOperator JustOperator parseCommandOperandParseResult NoOperandPartialOperandJustMoveJustTextObject textObjectregionForOperatorLineB parseOperandsplitCountModifierCommandlinearSyntaxMode'Lexer StyleName commonLexerextensionMatchesStyleBasedMode latexLexer$fYiVariableCabalBuffer 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 cursorBinding commandArgquoteArg escapeChar parseBang parseCount removePwdnormArg nameParserswitchToBuffer switchByName switchByRef printBufferseditshowEditnohlactionmodPastequit quitWindowEquitAllEsaveAndQuitAllE substituteglobal allowedCmdswriteCmd writeAsCmdtryWriteBuffer VimTagStack getTagList pushTagStack popTagStacktagsFiletagsFileLocation tagStackList tagStackIndex$fYiVariableVimTagStack$fDefaultVimTagStack getTagIndex setTagList setTagIndex$fBinaryVimTagStackmkDigitBindingtagJumpBinding tagPopBinding motionBindingchooseRegisterBinding zeroBinding repeatBinding jumpBindingsfinishingBingings pasteBefore pasteAfteroperatorBindingscontinuingBindingsnonrepeatableBindingsfileEditBindingssetMarkBinding searchWordE searchBindingcontinueSearchingrepeatGotoCharE enableVisualEcutCharEtabTraversalBindingopenFileUnderCursorrecordMacroBindingfinishRecordingMacroBindingplayMacroBinding withCountwithCountOnBuffer escAction exBinding digitBindingschangeVisualStyleBindingregionOfSelectionB shiftDBindingmkOperatorBindingreplaceBindingswitchEdgeBinding insertBindingparseTag parseNexttagnextdropToLastWordOfexitExfinishBindingYfinishBindingE finishPrereq finishAction failBindingEhistoryBinding editAction defVimKeymappureHandleEventimpureHandleEventgenericHandleEventperformEvalIfNecessaryallPureBindings convertEvent$fDefaultGhciProcessName$fYiVariableGhciProcessName$fBinaryGhciProcessName GhciBuffer insideGroupghci _ghciBufferCharToTTScannerstrokesOfParenTree mkParenModeHL mkHaskModeHLmkOnlineModeHL haskellLexerliterateHaskellLexer adjustBlockcleverAutoIndentHaskellBcleverAutoIndentHaskellCcolOf'tokCol nominalIndenttokText tokRegion isLineComment contiguouscoalescecleverPrettifytokTypghciInferTypeOf$fYiVariableGhciBuffer$fMonoidSupertabExt$fMkSnippetCmdSnippetMark()$fMkSnippetCmdRWSTa$fMkSnippetCmdText()$fMkSnippetCmdYiString()$fMkSnippetCmd[]() $fOrdMarkInfo$fYiVariableDependentMarks$fYiVariableBufferMarks$fDefaultDependentMarks$fDefaultBufferMarks$fBinaryMarkInfo 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