!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI 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 yz{|}~       !"#$%&'()*+,-./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){)|)})~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))********************************************************************************** + + , , ,------------.../// 0!0"1#1$1%1&1'1(1)1*1+1,1-1.1/101112232435364748595:6;6<7=7>8?8@9A9B: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;{;|;};~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<===================>????????@@@@@@@@ @ @ @ @ @@AB !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEE E E E E EAAAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:A;A<A=A>A?A@AAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA[A\A]A^A_A`AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzA{A|A}A~AAAAAAAAAAAAFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKLLLLLLMMM>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> >!>">#>$>%>&>'>(>)>*>+>,>->.>/>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?{?|?}?~????????????????????????????????????????????????????????NNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRSSSSSSS@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-T.U/V0V1V2V3V4V5V6V7V8V9V:V;V<V=V>V?V@VAVBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWXXXYYZY[Y\Y]Y^Y_Y`YaYbYcYdYeYfYgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZ{Z|Z}Z~ZZZZZZZZZZZ[[\\\\\\\]]]]]]]]]]^________`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbccccccccccccccccccccccdeeeeeeeeeefffffffffff f f g h ijkkkkkkkkkkkkkllBB B!B"B#B$B%B&B'B(B)B*B+B,B-B.B/B0B1B2B3B4B5B6m7m8m9m:m;m<m=m>m?m@mAmBnCnDnEUFUGUHUIUJUKULUMUNUOoPoQoRoSoToUoVoWoXoYoZo[o\p]q^q_q`qaqbqcqdqeqfqgqhqiqjrksltmunvowpxqyrzs{t|u}v~wxyz{|}~X                           ! " # $ % & ' ( ) * + , - . / 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 { | } ~  T T  Safe-InferredHMQ       Safe-InferredQ #Triples: (shorthand, name, unicode)    NoneQ  A blank Trie "Insert a new string into the trie. 1Take a list of String and compress it into a Trie =Take a trie and expand it into the strings that it represents RTakes a trie and a prefix and returns the sub-trie that of words with that prefix wFinds the longest certain path down the trie starting at a the root Invariant Assumption: All paths have at least one true node below them 9Helper function, finds all the suffixes of a given prefix VHelper function, finds the longest certain path down the trie starting at a given word    Safe-Inferred-Q         Safe-InferredQ Safe-InferredQ         Safe-Inferred !"HJKMQ Parser processParser specification JCompute 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. LPush a chunk of symbols or eof in the process. This forces some suspensions. Push some symbols. Push eof Make a parser into a process. ARun 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  1 2 3  ! 4 5 6 7 8 9 : ; < = > ?        , - 1 2 3  ! 6 70                              ! " # $ % & ' ( ) * + , - . / 0  1 2 3  ! 4 5 6 7 8 9 : ; < = > ? !  " None3Q"QSet the file to which debugging output should be written. Though this is called initDebug. Debugging output is not created by default (i.e., if this function is never called.) The target file can not be changed, nor debugging disabled.#>Outputs the given string before returning the second argument.(Traces x and returns y.)Like traceM, but returns (). @"#$%&' A()"#$%&'()"#()%&'$ @"#$%&' A()NoneQ 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 [ \ ] ^ _ ` B C D E F G H I J K L M N O P Q R Y Z [ \ ] ^ _ ` 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-InferredQ aKSubtraction, but treat maxBound as infinity. i.e. maxBound -? x == maxBound b a c d b c d b a c d Safe-InferredMQ eRExecute IO (Maybe a) action replacing all exceptions with return value of Nothing. f<Execute IO () action, replacing all exceptions with messages g<Execute IO () action, replacing all exceptions with messages e f g e f g e f g Safe-InferredQ hRemoves /./ // and /../. sequences from path, doesn't follow symlinks i>Returns absolute name of the file, which doesn't contain any /./, /../, // sequences or symlinks j/Dereferences symbolic links until regular file directorysomething_else appears kMake a path absolute. l,Combines two paths, moves up one level on .. m(Splits path into parts by path separator h i j k l n o m h i o h i j k l n o m Safe-InferredQ p!Canonicalize a user-friendly path qWTurn a user-friendly path into a computer-friendly path by expanding the leading tilda. r!Is a user-friendly path absolute? p q r p q r p q rNoneQ s-Guess what lib/exe the sourcefile belongs to. tDFind a package description file in the given directory. Looks for .cabal files. u s t Where to look pkgname.cabal u s t u s t Safe-InferredQ v w x y z { | } ~   w } ~   v w x y z { | } ~   Safe-InferredQHSMap an Event to a Char. This is used in the emacs keymap for Ctrl-Q and vim keymap insertSpecialChar%*+,-./0123456789:;<=>?@ABCDEFGH *+,-./0123456789:;<=>?@ABCDEFGH*+G,@?>=<;:9876543210/.-AFEDCBH *+,@?>=<;:9876543210/.-AFEDCBGH None +-:EHMQ%I3A '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 a type.JSame as lm, but with all ^s Md. See p for an example of its use.L-Things with orientations which can be flippedNA general bounding box IFixed number of "main" windows on the left; stack of windows on the right Transposed version of  RTall windows, with arranged in a balanced binary tree with sliders in between them CWide windows (windows placed on top of one another, equally spaced) ?Tall windows (i.e. places windows side-by-side, equally spaced)TExistential wrapper for aV5The type of layout managers. See the layout managers m, q and o" for some example implementations.WbGiven the old layout and the new list of windows, construct a layout for the new list of windows.If the layout manager uses sliding dividers, then a user will expect that most of these dividers don't move when adding a new window. It is the layout manager's responsibility to ensure that this is the case, and this is the purpose of the Layout a argument.oThe old layout may come from a different layout manager, in which case the layout manager is free to ignore it.X4Describe the layout in a form suitable for the user.Y<Cycles to the next variant, if there is one (the default is  )Z@Cycles to the previous variant, if there is one (the default is  [Relative sizes, for g\$Divider position, in the range (0,1)]Divider reference^Orientations for g and baUI-agnostic layout schema. The basic constructs are (horizontal/vertical) stacks with fixed ratios between window sizes; and (horizontal/vertical) pairs with a slider in between (if available).cInitial position of the dividerd8Index of the divider (for updating the divider position)eUpper of of the pairfLower of the pairh OrientationiZThe layout stack, with the given weights TODO: fix strictness for stack (it's still lazy)kAccessor for the \ with given referencelXTrue if the internal layout managers have the same type (but are not necessarily equal).m,Windows placed side-by-side, equally spaced.n4Windows placed on top of one another, equally spacedoNTall windows, arranged in a balanced binary tree with sliders in between them.pTransposed version of oqn4 windows on the left; stack of windows on the right.rTransposed version of q.wSpecial case of v with all [s equal. The default layout is  tallLayout *The def layout consists of a single windowMI JKLMNOPQRS TUVWXYZ[\]^_`abcdefghijklmno pqrs tuvwx 0IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx1ajgbhihcdef^`_\][kVWXYZTUlnmopqrNOPQRSsLMJKIutvwx/I JKLMNOPQRS       TUVWXYZ[\]^`_a jgbhihcdefklmno pqrs tuvwx None3Q}'Combination of the Control.Monad.State   and NRerun the monad until the boolean result is false, collecting list of results.yz{|}~ yz{|}~yz{|}~ yz{|}~  Safe-InferredQ  Safe-InferredQ%Remove any trailing strings matching irsC (input record separator) from input string. Like perl's chomp(1).Trim spaces at beginning and end Inverse of . In contrast to  ., this does not add an empty line at the end. Split a String in lines. Unlike  2, this does not remove any empty line at the end.7A helper function for creating functions suitable for modifySelectionB and  modifyRegionBQ. To be used when the desired function should map across the lines of a region. None368Q As !, but with O(n*log(n)) behaviour.>As Map.adjust, but the combining function is applied strictly.Generalisation of   to arbitrary foldables.Alternative to groupBy. 7groupBy' (\a b -> abs (a - b) <= 1) [1,2,3] = [[1,2,3]]whereas 8groupBy (\a b -> abs (a - b) <= 1) [1,2,3] = [[1,2],[3]]7TODO: Check in ghc 6.12 release if groupBy == groupBy'.3Return the longest common prefix of a set of lists. sP(xs) === all (isPrefixOf (commonPrefix xs)) xs length s > length (commonPrefix xs) --> not (all (isPrefixOf s) xs)VFinds the first element satisfying the predicate, and returns a zipper pointing at it.Given a function which moves the focus from index A to index B, return a function which swaps the elements at indexes A and B and then moves the focus. See Yi.Editor.swapWinWithFirstE for an example.Write nothing. Use with Read nothing, and return   . Use with . None+:;BMQ &An extensible record, indexed by type. 1Serializable, defizable dynamically-typed values.!Class of values that can go in a   or a 5. These are typically for storing custom state in a FBuffer or an Editor.An "extensible record" of (s. Can be constructed and accessed with   and .3This type can be thought of as a record containing all s in existence.!Class of values that can go in a  ConfigDynamic or a ConfigDynamicValues . These will typically go in a Config . As the Config has no mutable state, there is no need to serialize these values: if needed, they will be set in the user's configuration file. The  n constraint ensures that, even if the user hasn't customised this config variable, a value is stil available.Accessor for any Z. Neither reader nor writer can fail: if the user's config file hasn't set a value for a ", then the default value is used. Build a   Try to extract a value from the  . *Converts a dynamic to a serializable value +Converts a serializable value to a dynamic.KAccessor for a dynamic component. If the component is not found, the value   is used.     None !"23468MQ #Abstraction of the automaton state.'Operational representation of a processInteractive process description,Abstraction of monadic interactive processesOutputs a result.iConsumes and returns the next character. Fails if there is no input left, or outside the given bounds. 9Convert a process description to an "executable" process. Push an event in the automaton (find all the writes that are accessible.+Parses and returns the specified character.9Parses and returns the specified list of events (lazily).+Combines all parsers in the specified list. option x p will either parse p or return x without consuming any input.8 "   None3QhGiven a path relative to application data directory, this function finds a path to a given data file.zGiven a path relative to application configuration directory, this function finds a path to a given configuration file.Given an action that retrieves config path, and a path relative to it, this function joins the two together to create a config file path.#Get Yi master configuration script.@Get articles.db database of locations to visit (for Yi.IReader.)6Get path to Yi history that stores state between runs.TGet path to environment file that defines namespace used by Yi command evaluator. None246Q The Foldable instance of   only defines foldMap , so the   needed for  g is inefficient, and can cause stack overflows. So, we roll our own (somewhat inefficient) version of   to avoid this. SGet the length of the string. (This information cached, so O(1) amortized runtime.) bCount the number of newlines in the strings. (This information cached, so O(1) amortized runtime.) 3Append two strings by merging the two finger trees. +Split the string at the specified position. jSplit the rope on a chunk, so that the desired position lies within the first chunk of the second rope. :Split before the specified line. Lines are indexed from 0. 9Split after the specified line. Lines are indexed from 0.*     "       None *+6:BMQ%Direction of movement inside a bufferWindow referencesSize of a buffer regionA point in a bufferReference to a buffer.A mark in a bufferreverse if Backward direction is in the same style of   or  p functions, It takes one argument per direction (backward, then forward) and a direction to select the output.None+Q The region data type. The region is semi open: it includes the start but not the end bound. This allows simpler region-manipulation algorithms. Invariant : regionStart r <= regionEnd r$Take the intersection of two regions>Take the union of two regions (including what is between them) iCreate a region from ordered bounds. If 2nd argument is greater than 1st, then the region will be empty.MConstruct a region from its bounds, emacs style: the right bound is excludedThe empty region3True if the given point is inside the given region.GTrue if the given point is inside the given region or at the end of it.?Returns if a region (1st arg) is included in another (2nd arg)      NoneQ CFinish an atomic command, for the purpose of killring accumulation. SPut some text in the killring. It's accumulated if the last command was a kill too Push a string in the killring. CSet the top of the killring. Never accumulate the previous content.Get the top of the killring.                              NoneQ       None+Q A window onto a buffer.regular or mini window?the buffer this window opens toSlist of last accessed buffers (former bufKeys). Last accessed one is first element:height of the window (in number of screen lines displayed)Gview area. note that the top point is also available as a buffer mark.identifier for the window (for UI sync) This is required for accurate scrolling. Scrolling depends on the actual number of buffer lines displayed. Line wrapping changes that number relative to the height so we can't use height for that purpose.NThe actual number of buffer lines displayed. Taking into account line wrapping!#Get the identification of a window."%Return a "fake" window onto a buffer. !"#$%  !" %!$#"  !"#$%None+HMQ&*A tab, containing a collection of windows.'For UI sync; fixes #304 Visible windows(;Current layout. Invariant: must be the layout generated by  , up to changing the cs. Glayout manager (for regenerating the layout when we add/remove windows)+@Returns 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.-iAccessor for the layout manager. When setting, will trigger a relayout if the layout manager has changed..Gets / sets the position of the divider with the given reference. The caller must ensure that the DividerRef is valid, otherwise an error will (might!) occur./ A specialised version of "fmap".0Forces all windows in the tab1!Folds over the windows in the tab2 Make a tab from multiple windows3Make a tab from one window Equality on tab identity (the ')& ' ( )*+,-.  /01 23   &'()*+,-./0123&'(),-.'+*0/(123& ' ( )*+,-.  /01 23   None3Q5ETreat the input not as a regex but as a literal string to search for.6(Compile for newline-insensitive matching7+Compile for matching that ignores char caseA=Return an escaped (for parseRegex use) version of the string. +Return a pattern that matches its argument. EReverse a pattern. Note that the submatches will be reversed as well.C,The regular expression that matches nothing.456789:;<=>? @ A  ! BC " # $Q % & ' ( ) * + , - . / 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 e456789:;<=>?@ABC4765@89:;<=>?BCA476589:;<=>? @ A  ! BC " # $ Safe-InferredQ*EThe system-default color of the engine used. e.g. in Gtk this should pick whatever the user has chosen as default color (background or forground depending on usage) for the text.GkA StyleName determines what style to use, taking into account the set of rendering preferences given by a H#. Typically, style names will be f-valued field names of H.H The UI typeJ"ground attributes for the modelineK#transformation of modeline in focusL ground attributes for the tabbarM$a tab that currently holds the focusN*a tab that does not have the current focusO)ground attributes for the main text viewsPthe selected portionQempty file marker coloursRindicates errors in textSsearch matches paren matches other hintsTcurrent search matchU all commentsV"additional only for block commentsWapplied to language keywordsXnumbersY.preprocessor directive (often in Haskell or C)Zconstant strings[!additional style for long strings\+type name (such as class in an OO language)]data constructor^style of import names_(builtin things, e.g. Array in JavaScript`regular expressionsa"any standard variable (identifier)binfix operatorsc/Style of a quotation (e.g. in template haskell)d.stuff that's passed to the shell in a Makefileemakefile rule headersfdThe style is used to transform attributes by modifying one or more of the visual text attributes.g3Visual text attributes to be applied during layout.kmThe text should be show as "active" or "selected". This can be implemented by reverse video on the terminal.p!A style that sets the foreground.q!A style that sets the background.r"A style that sets the font to bolds&A style that sets the style to italicst)A style that sets the style to underlinedu)A style that sets the style to underlinedvThe identity transform.wKConvert a color to its text specification, as to be accepted by XParseColorEDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~EDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~EghijklmnofHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeGpqrutsvDFEwx~}|{zyDFEGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None-./6:MQ Initial stateHow far did the scanner look to produce this intermediate state? The state can be reused as long as nothing changes before that point.bRunning function returns a list of results and intermediate states. Note: the state is the state before. producing the result in the second component.The main type of syntax highlighters. This record type combines all the required functions, and is parametrized on the type of the internal state.$The start state for the highlighter.focus at a given point, and return the coresponding node. (hint -- the root can always be returned, at the cost of performance.)This takes as input a scanner that returns the "full" result at each element in the list; perhaps in a different form for the purpose of incremental-lazy eval. f g    f gNone +234:HMQ2Mutation actions (also used the undo or redo list) For the undoredo, we use the dpartial checkpoint/ (Berlage, pg16) strategy to store just the components of the state that change.Note that the update direction is only a hint for moving the cursor (mainly for undo purposes); the insertions and deletions are always applied Forward. h buffer text iMarks for this buffer jsyntax highlighting state k/set of (non overlapping) visual overlay regions l9Lowest modified offset since last recomputation of syntax mNew FBuffer filled from string. nread n bytes from buffer b, starting at i oWrite string into buffer. pWrite string into buffer. quShift a mark position, supposing an update at a given point, by a given amount. Negative amount represent deletions. r Point of EOF sReturn n Chars starting at i of the buffer as a list"Create an "overlay" for the style sty between points s and e t,Obtain a style-update for a specific overlay u/Add a style "overlay" between the given points. v#Remove a previously added "overlay" w'Return style information for the range (i,j) Style information is derived from syntax highlighting, active overlays and current regexp. The returned list contains tuples (l,s,r)> where every tuple is to be interpreted as apply the style s from position l to r in the buffer. In each list, the strokes are guaranteed to be ordered and non-overlapping. The lists of strokes are ordered by decreasing priority: the 1st layer should be "painted" on top. xChecks if an Update is valid yApply a valid update zReverse the given update {3Line at the given point. (Lines are indexed from 1) |;Point that starts the given line (Lines are indexed from 1) }$Get begin of the line relatively to point. ~PReturn indices of all strings in buffer matching regex, inside the given region. Modify a mark value. cReturns the requested mark, creating a new mark with that name (at the supplied position) if neededO h i j k l   m n o p q r s  t u v w x y z { | } ~  88  m r s  t u v w x y z { | } ~  5  h i j k l    m n o p q r s  t u v w x y z { | } ~  NoneQ -A URList consists of an undo and a redo list. A new empty . Notice we must have a saved file point as this is when we assume we are opening the file so it is currently the same as the one on diskAdd an action to the undo list. According to the restricted, linear undo model, if we add a command whilst the redo list is not empty, we will lose our redoable changes.Add a saved file point so that we can tell that the buffer has not been modified since the previous saved file point. Notice that we must be sure to remove the previous saved file points since they are now worthless.!This undoes one interaction step. This redoes one iteraction step. CPrepare undo by moving one interaction point from undoes to redoes. 4Remove an initial interactive point, if there is one 5Insert an initial interactive point, if there is none QRepeatedly undo actions, storing away the inverse operations in the redo list. Run the undo-function fL on a swapped URList making it operate in a redo fashion instead of undo.undoIsAtSavedFilePoint. True/ if the undo list is at a SavedFilePoint indicating that the buffer has not been modified since we last saved the file. Note: that an empty undo list does NOT mean that the buffer is not modified since the last save. Because we may have saved the file and then undone actions done before the save.         None-HMQ Lexer stateReturn a constant token3Return a constant token, and modify the lexer stateJConvert the parsed string into a token, and also modify the lexer state&Convert the parsed string into a tokenbCombine a character scanner with a lexer to produce a token scanner. May be used together with  mkHighlighter to produce a  , or with linearSyntaxMode to produce a Mode.Nunfold lexer function into a function that returns a stream of (state x token))    A lexer Initial user state for the lexer ((     NoneMQ !! None;Q7Scan one token. Return (maybe) a token and a new state.,          None /24=KMQDirect subtrees of a tree bPrune the nodes before the given point. The path is used to know which nodes we can force or not.Given an approximate path to a leaf at the end of the region, return: (path to leaf at the end of the region,path from focused node to the leaf, small node encompassing the region) ^Return the first element that matches the predicate, or the last of the list if none matches. Return the element before first element that violates the predicate, or the first of the list if that one violates the predicate. kGiven a path to a node, return a path+node which node that encompasses the given node + a point before it.Search the tree in pre-order starting at a given node, until finding a leaf which is at or after the given point. An effort is also made to return a leaf as close as possible to p#. TODO: rename to fromLeafToLeafAt tTakes a list of (node, index of already inspected child), and return all leaves in this node after the said child). sGiven a root, return all the nodes encountered along it, their paths, and the index of the child which comes next. 3Return all leaves (with paths) inside a given root. |Return all subtrees in a tree; each element of the return list contains paths to nodes. (Root is at the start of each path)Search the given list, and return the last tree before the given point; with path to the root. (Root is at the start of the path)+Return all subtrees in a tree, in preorder."Return the 1st token of a subtree.#Return the last token of a subtree. 5Given a tree, return (first offset, number of lines).C              <                 None -./24=KMQ       !None6:MQ                       "NoneMQiTransform a scanner into a scanner that also adds opening, closing and "next" tokens to indicate layout.               #None;Q07Scan one token. Return (maybe) a token and a new state.P           ! " # $ !"#$%&'()*+ % & ' ( ),-. */0 + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I !"#$%&'()*+,-./0/0,-.+'*)(&%$#"! 3          " !  # $&%$#"! '*)(+ % & ' ( ),-. */0 + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I$None;Q27Scan one token. Return (maybe) a token and a new state.A J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c12 d e f g h i j k l m n o p q r s t u v w x y z { | } ~  12124 J K P O N M L Q T S R U Y X W V Z [ \ ] ^ _ ` a b c12 d e f g h i j k l m n o p q r s t u v w x y z { | } ~  %None;Q47Scan one token. Return (maybe) a token and a new state.< 34 34341     34 &None;Q67Scan one token. Return (maybe) a token and a new state.; 56 56560     56 'None;Q87Scan one token. Return (maybe) a token and a new state.;             78              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 478780                78              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4(None;Qu7Scan one token. Return (maybe) a token and a new state. 5 6 7 8 9 : ; < = > ? @ A B C D E F9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm G H I J Knopq Lrstu 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 { | } ~  =9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu=runo9tspq:HGFEDCBA@?>=<;mhlkjiTgfedcba`_^]\[ZYXWVUISRQPONMLKJa 5 6 ; : 9 8 7 < ? > = @ D C B A E F9:HGFEDCBA@?>=<;I SRQPONMLKJTgfedcba`_^]\[ZYXWVUhlkjim G H I J Knopq Lrstu 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 { | } ~  )None/24=KQWv$Exp can be expression or declarationxlet expressionyData constructorzBType constructor data constructor same as with the TC constructor|URighthandside of functions with | the PAtom in PGuard' does not contain any comments~Module identifier An optional!Righthandside of functions with =An wrapper for errors Where clause,An atom is a token followed by many comments%A block of things separated by layout"A parenthesized, bracked or bracedClass declarationData declaration RHSData declarationType declarationType signatureThe body of the moduleThe module declaration part bCheck if a token is a brace, this function is used to fix the layout so that do { works correctly 4Theese are the tokens ignored by the layout handler. 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 CParse 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 5Parse 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, this is quite similar to the sepBy function provided in Parsec, but this one allows an optional extra separator at the end. 2commaSep p = p `pSepBy` (symbol (==(Special ','))) DSeparate 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 yParse classes and instances This is very imprecise, but shall suffice for now. At least is does not complain too often. $Parse some guards and a where clause BRight-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  ) DParse something that can contain a data, type declaration or a class JA "normal" expression, where none of the following symbols are acceptable. 4Parse an expression, as a concatenation of elements. 4Parse an expression, as a concatenation of elements. yParse an "element" of an expression or a pattern. "at" is a list of symbols that, if found, should be considered errors. 5List of things that always should be parsed as errors 1List of things that should not be parsed as noise yThese symbols are always properly recognized, and therefore they should never be accepted as "noise" inside expressions. ^Parse parenthesis, brackets and braces containing an expression followed by possible comments ^Parse parenthesis, brackets and braces containing an expression followed by possible comments ^Parse parenthesis, brackets and braces containing an expression followed by possible comments Create a special error token. (e.g. fill in where there is no correct token to parse) Note that the position of the token has to be correct for correct computation of node spans.vwxyz{|}~   Avwxyz{|}~Bv~}|{zyxwjv;~}|{zyxw   *None;Q The different tokens.HlStateB is 0 when outside of a multi-line comment and -1 when inside one.The constructors for Operator0 have an apostrophe as a suffix because e.g. LT is already used by Prelude.The constructors for Reserved+ have an apostrophe as a suffix because Default" is already used. Also note that  Undefined' is not intended as some sort of "backup" reserved word for things we don't care about -- it really means the "undefined" built-in in JavaScript. The Line0 constructor represents a single-line comment. Start and EndH represent the start and end of a multi-line comment, respectively. Text0 represents the text in a multi-line comment.Prefix operators. NOTE: Add' is also a valid prefix operator, but since it's completely useless in the real world, we don't care about it here. Doing this makes parsing much, much easier.Postfix operators.Infix operators.Takes a 7 and returns a style to be used for that type of token. TODO: The   check is potentially unnecessarily slow. We could split the Const constructor into two different ones, one for builtins and one for others. Given a String& representing an operator, returns an % with the appropriate constructor. Given a String) representing a reserved word, returns a % with the appropriate constructor.7Scan one token. Return (maybe) a token and a new state.         !"#$%&'()*+,-./0123456789:;<RR=           !"#$%&'()*+,-./0123456789:;<+None;Q 7Scan one token. Return (maybe) a token and a new state.;=>?@ABCDEFGHIJKLMNOPQRS  TUVWXYZ[\]^_`abcdefghijklmnopqrstu    0=@?>ADCBEIHGFJKLMNOPQRS  TUVWXYZ[\]^_`abcdefghijklmnopqrstu,None;Q 7Scan one token. Return (maybe) a token and a new state.-vwxyz{|}~         "vyxwz}|{~   -None;Q7Scan one token. Return (maybe) a token and a new state.8  &.None;Q7Scan one token. Return (maybe) a token and a new state.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLr      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL/None;Q7Scan one token. Return (maybe) a token and a new state.SMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@MNSRQPOTWVUX\[ZY]^_edcba`fghijklmnopqrstuvwxyz{|}~0None;Q!7Scan one token. Return (maybe) a token and a new state.X ! ! !F !1None;Q17Scan one token. Return (maybe) a token and a new state.E"#$%&'()*+,-./01      !"#$%&'"#$%&'()*+,-./0101/".-,+*)('&%$#." .-,+*)('&%$#/01      !"#$%&'2None;Q37Scan one token. Return (maybe) a token and a new state.C()*+,-./0123456789:;<=>23?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh23238(+*),/.-0432156789:;<=>23?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh3None;Q57Scan one token. Return (maybe) a token and a new state.ijklmnopqrstuvwxyz{|}~454545oijonmlkpsrqtxwvuyz{| ~}454None;Q77Scan one token. Return (maybe) a token and a new state.267     6767'67     5None;Q97Scan one token. Return (maybe) a token and a new state.7 !"#$%&'()*+,-./012348956789:;<=>?@ABCDEFGHIJKLMNOPQR8989,! "%$#&*)('+,-./012348956789:;<=>?@ABCDEFGHIJKLMNOPQR6None;Q;7Scan one token. Return (maybe) a token and a new state.4STUVWXYZ[\]^_`abcdefghi:;jklmnopqrstuvwxyz{|}~:;:;)SVUTWZYX[_^]\`abcdefghi:;jklmnopqrstuvwxyz{|}~7None;Q=7Scan one token. Return (maybe) a token and a new state.9<=<=<=*<=8None;Q?7Scan one token. Return (maybe) a token and a new state.->?>?>?">?9NoneQGet strokes Module for moduleGet strokes for Imports,Get strokes for expressions and declarations@A@A@A@A:None -/24=KQMSearch the given list, and return the 1st tree after the given point on the given line. This is the tree that will be moved if something is inserted at the point. Precondition: point is in the given line.N5Given a tree, return (first offset, number of lines).UCreate a special error token. (e.g. fill in where there is no correct token to parse) Note that the position of the token has to be correct for correct computation of node spans.BCDEFGHIJKLMNOPQRSTUVBCDEFGHIJKLMNOPQRSTUIJKLHBGFEDCVMNOPQRSTUBGFEDCHIJKLMNOPQRSTUV;None+/24Q(lTRepresents either a variable name or a variable name assigned to an expression. AssBeg is a variable name maybe followed by an assignment. AssRst' is an equals sign and an expression. (AssBeg x (Just (AssRst '=' '5'))) means x = 5. Instances of Failablep can represent failure. This is a useful class for future work, since then we can make stroking much easier. Instances of  Strokable/ are datatypes which can be syntax highlighted.Normal stroker.Error stroker.^Given a new style and a stroke, return a stroke with the new style appended to the old one.,Given a list of tokens to check for errors (xs%) and a list of tokens to stroke (xs'), returns normal strokes for xs'A if there were no errors. Otherwise returns error strokes for xs'.Given a list of TT , if any of them is an error, returns an error stroker, otherwise a normal stroker. Using e.g. existentials, we could make this more general and have support for heterogeneous lists of elements which implement Failable, but I haven't had the time to fix this.Given a TT , return a Stroke for it.The main stroking function. Main parser.HParser for statements such as "return", "while", "do-while", "for", etc.MParser for "blocks", i.e. a bunch of statements wrapped in curly brackets or just a single statement.Note that this works for JavaScript 1.8 "lambda" style function bodies as well, e.g. "function hello() 5", since expressions are also statements and we don't require a trailing semi-colon.5TODO: function hello() var x; is not a valid program.Parser for expressions which may be statements. In reality, any expression is also a valid statement, but this is a slight compromise to get rid of the massive performance loss which is introduced when allowing JavaScript objects to be valid statements.@The basic idea here is to parse "the rest" of expressions, e.g. + 3 in x + 3 or [i] in x[i]y. Anything which is useful in such a scenario goes here. TODO: This accepts [], but shouldn't, since x[] is invalid.Parser for expressions.zParses both empty and non-empty arrays. Should probably be split up into further parts to allow for the separation of [] and  [1, 2, 3].!Parses a semicolon if it's there.3Parses a comma-separated list of valid identifiers.Parses a comment.Parses a prefix operator.Parses a infix operator.Parses a postfix operator.Parses any literal.Parses any literal.Parses any string.Parses any valid number.Parses any valid identifier.Parses any boolean.Parses a reserved word.Parses a special token.Parses an operator.!Expects a token x, recovers with .Expects a special token.Expects an expression.0General recovery parser, inserts an error token.Weighted recovery.Better name for .Better name for .<TODO: This code is *screaming* for some generic programming.TODO: Somehow fix Failable and failStroker to be more "generic". This will make these instances much nicer and we won't have to make ad-hoc stuff like this.xWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~fWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~x~{}|xzytwvupsrqlonm^kjihgfedcba`_Z]\[WYXKWYXZ]\[^ kjihgfedcba`_lonmpsrqtwvuxzy{}|~ <None234Q0The main verifier which calls the sub-verifiers.{Given a list of function declarations, checks for multiple function declarations, including the functions' subfunctions. Given two Tok t, compares the ts.3Returns a list of the functions in the given block.Given a *, returns the token representing the name.Given a #, returns its inner body as a list.Given a  ValidName* returns the string representing the name.Like + but drops the first element in the result.=None -/24=KQNone*+-./23:BHIMQT/The BufferM monad writes the updates performed.immutable unique keyundo/redo listdynamic components;prefered 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 diskread-only flag2the keymap is ready for insertion into this bufferHmaybe a filename associated with this buffer. Filename is canonicalized.>Used to specify the behaviour of the automatic indent command.dDecrease the indentation to the next smaller indentation hint, if no such hint exists do nothing.VIncrease the indentation to the next higher hint if no such hint exists do nothing.Decrease the indentation to the next smaller indentation hint. If we are currently at the smallest level then cycle back to the largestIncrease the indentation to the next higher indentation hint. If we are currently at the highest level of indentation then cycle back to the lowest.A Mode customizes the Yi interface for editing a particular data format. It specifies when the mode should be used and controls file-specific syntax highlighting and command input, among other things.$so this can be serialized, debugged. +What type of files does this mode apply to?!Syntax highlighter"Prettify current "paragraph"# Buffer-local keymap modification$emacs-style auto-indent line%)adjust the indentation after modification&BFollow a "link" in the file. (eg. go to location of error message))?Strokes that should be applied when displaying a syntax element,6An action that is to be executed when this mode is set-'buffer-local modeline formatting method0Currently duplicates some of Vim's indent settings. Allowing a buffer to - specify settings that are more dynamic, perhaps via closures, could be - useful.2)Insert spaces instead of tabs as possible3 Size of a Tab4Indent by so many columns;6update the syntax information (clear the dirty "flag")<Use in readonly!I8Given a buffer, and some information update the modelineON.B. the contents of modelines should be specified by user, and not hardcoded.J;Given a point, and the file size, gives us a percent stringKAdds an "overlay" to the bufferLRemove an existing "overlay"N Execute a BufferMw value on a given buffer and window. The new state of the buffer is returned alongside the result of the computation.T Execute a BufferM[ value on a given buffer, using a dummy window. The new state of the buffer is discarded.U9Mark the current point in the undo list as a saved state.WAnalogous to const, but returns a function that takes two parameters, rather than one.\/Mode applies function that always returns True.]0Mode applies function that always returns False._Create buffer named nm with contents s` Point of eofaExtract the current pointbReturn n elems starting at i of the buffer as a listg'Move point in buffer to the given indexi6Revert all the pending updates; don't touch the point.j6Write an element into the buffer at the current point.k0Write the list into the buffer at current point.l Insert newline at current point.n<Insert the list at specified point, extending size of buffero:Insert the list at current point, extending size of bufferq:Insert the char at current point, extending size of bufferr deleteNAt n p deletes n# characters forwards from position psReturn the current line numbertReturn line numbers of marksuGo to line number n. ny is indexed from 1. Returns the actual line we went to (which may be not be the requested line, if it was out of range)w Set the modeyModify the modeJReturn indices of strings in buffer matched by regex in the given region.PReturn indices of next string in buffer matched by regex in the given directionSet the given mark's point.Highlight the selectionhMove point by the given number of characters. A negative offset moves backwards a positive one forward. Move point -1Move cursor -nMove cursor +1Move cursor +nMove point down by n lines. n can be negative. Returns the actual difference in lines which we moved which may be negative if the requested line difference is negative.Move point up one lineMove point down one line+Return the contents of the buffer as a list'Read the character at the current pointpRead the character at the given index This is an unsafe operation: character NUL is returned when out of boundsDelete n* characters forward from the current pointCurrent column. Note that this is different from offset or number of chars from sol. (This takes into account tabs, unicode chars, etc.).Returns start of line point for a given point pGo to line indexed from current point Returns the actual moved difference which of course may be negative if the requested difference was negative.pAccess to a value into the extensible state, keyed by its type. This allows you to save or retrieve inside a  monad, ie: Hassign bufferDynamicValueA updatedvalue value <- use bufferDynamicValueA perform a  BufferM a4, and return to the current point. (by using a mark) perform an  BufferM a!, and return to the current point_What would be the point after doing the given action? The argument must not modify the buffer.      !"#$%&'()*+,-./0123456 !"789:;#$%<=>?@A&'B(CD)E*FGH+I,-J./0KLMNOPQRSTUVWXY1Z[\]^2_3`abcdefgh45ijklmnopqrstuv6wxyz{|7}~89:;<=>?@ABCDE8 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~56VONPTs`atg_upomnqbcjklr>Z[QRSWwxvyIJhDCUKLMEFG?@Ai;~ !"#$%&'()*+,-./01234\]^|{z}Hfde8<789:B=XY56      !"#$%&'()*+,-./01234 !"789:;#$%<=>?@A&'B(CD)E*FGH+I,-J./0KLMNOPQRSTUVWXY1Z[\]^2_3`abcdefgh45ijklmnopqrstuv6wxyz{|7}~89:;<=>?@ABCDECNoneQ &Delete an arbitrary part of the buffer$Read an arbitrary part of the buffer%Replace a region with a given string.#Replace a region with a given rope.As W, but do a minimal edition instead of deleting the whole region and inserting it back.Swap the content of two RegionsPModifies the given region according to the given string transformation functionAs W, but do a minimal edition instead of deleting the whole region and inserting it back.1Extend the right bound of a region to include it.See a region as a block/rectangular region, since regions are represented by two point, this returns a list of small regions form this block region.F The string modification functionThe region to modifyGHI"FGHIDNone+Q  Boundary side!Designate a given "unit" of text.the whole documentYa "vertical" line of text (area of text between two characters at the same column number)!a line of text (between newlines)a single characterLTurns a unit into its "negative" by inverting the boundaries. For example, outsideUnit unitViWordJ will be the unit of spaces between words. For units without boundaries (, ', ...), this is the identity function.J8Common boundary checking function: run the condition on siz@ characters in specified direction shifted by specified offset.jdelimited 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)K$Tells if a char can end a sentence ( , !, ?).LfVerifies that the list matches all the predicates, pairwise. If the list is "too small", then return M.SSeparator characters (space, tab, unicode separators). Most of the units above attempt to identify "words" with various punctuation and symbols included or excluded. This set of units is a simple inverse: it is true for "whitespace" or "separators" and false for anything that is not (letters, numbers, symbols, punctuation, whatever).4unitSep is true for any kind of whitespace/separatorNunitSepThisLine is true for any kind of whitespace/separator on this line onlyNIs the point at a Unit boundary in the specified  Direction?FParagraph to implement emacs-like forward-paragraph/backward-paragraphTParagraph that begins and ends in the paragraph, not the empty lines surrounding it.WUnit that have its left and right boundaries at the left boundary of the argument unit.genAtBoundaryB u d s2 returns whether the point is at a given boundary (d,s) . Boundary (d,s) , taking Word as example, means: Word ^^ ^^ 12 34 1: (Backward,OutsideBound) 2: (Backward,InsideBound) 3: (Forward,InsideBound) 4: (Forward,OutsideBound)rules: genAtBoundaryB u Backward InsideBound = atBoundaryB u Backward genAtBoundaryB u Forward OutsideBound = atBoundaryB u ForwardvRepeat an action until the condition is fulfilled or the cursor stops moving. The Action may be performed zero times.OuRepeat an action until the condition is fulfilled or the cursor stops moving. The Action is performed at least once.ADo an action if the current buffer character passes the predicatevGeneric move operation Warning: moving To the (OutsideBound, Backward) bound of Document is impossible (offset -1!) genMoveB u b dC: move in direction d until encountering boundary b or unit u. See  for boundary explanation.YGeneric maybe move operation. As genMoveB, but don't move if we are at boundary already.Move to the next unit boundaryAs (, unless the point is at a unit boundaryGDelete between point and next unit boundary, return the deleted region.8Region of the whole textunit where the current point is.BNon empty region of the whole textunit where the current point is.eRegion between the point and the next boundary. The region is empty if the point is at the boundary.xNon empty region between the point and the next boundary, In fact the region can be empty if we are at the end of file.6Non empty region at given point and the next boundary,CJPKLQRSTUVNWO66:JPKLQRSTUVNWOENone+Q Extend the given region to boundaries of the text unit. For instance one can extend the selection to complete lines, or paragraphs.      XYZ=     =          XYZANoneQNSToggle line comments in the selection by adding or removing a prefix to each line.Move point to start of lineMove point to end of lineMove cursor to originMove cursor to end of buffer*Move left if on eol, but not on blank line Move x- chars back, or to the sol, whichever is less!Move x0 chars forward, or to the eol, whichever is less"(Move to first char of next word forwards#)Move to first char of next word backwards%Move to the next occurence of c'3Move to the character before the next occurence of c)"Move to the previous occurence of c+6Move to the character after the previous occurence of c-.Move to first non-space character in this line.1Move to the last non-space character in this line/iGo to the first non space character in the line; if already there, then go to the beginning of the line.0?True if current line consists of just a newline (no whitespace)1INote: Returns False if line doesn't have any characters besides a newline2Move down next n paragraphs3 Move up prev n paragraphs57Return true if the current point is the start of a line65Return true if the current point is the end of a line7True if point at start of file8True if point at end of file9True 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 lineA;Get the previous point, unless at the beginning of the fileB1Get the next point, unless at the end of the fileEDelete one character backwardFTDelete forward whitespace or non-whitespace depending on the character under point.GVDelete backward whitespace or non-whitespace depending on the character before point.H$capitalise the word under the cursorIlowerise word under the cursorJ(capitalise the first letter of this wordK.switch the case of the letter under the cursorM(Delete to the end of line, excluding it.N)Delete whole line moving to the next lineO0Transpose two characters, (the Emacs C-t action)P)Delete trailing whitespace from all linesQMarks%Set the current buffer selection markR%Get the current buffer selection markSExchange point & mark.U=File info, size in chars, line no, col num, char num, percentXScroll up 1 screenYScroll down 1 screenZ%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 screenaScroll by n lines.b,Move the point to inside the viewable regioncreturn index of Sol on line n above current lined&return relative position of the point p/ relative to the region defined by the points rs and ree,Move the visible region to include the pointfMove to n lines down from top of screengMove to n' lines up from the bottom of the screenhMove to middle line in screenj(Return the region between point and markk8Return the empty region if the selection is not visible.lJGet the current region boundaries. Extended to the current selection unit.m7Select the given region: set the selection mark at the  and the current point at the .n1Extend the selection mark using the given region.p<Get a (lazy) stream of lines in the buffer, starting at the next line in the given direction.uUses a string modifying function to modify the current selection 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.w:Prefix each line in the selection using the given string.xUncomments the selection using the given line comment starting string. This only works for the comments which begin at the start of the line.yJustifies 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 lines will be justified only with respect to the part of the indentation which is selected.z3Replace the contents of the buffer with some string{9Fill the text in the region so it fits nicely 80 columns.}Sort the lines of the region.~BHelper function: revert the buffer contents to its on-disk version} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw%The string that starts a line commentx&The string which begins a line comment2A potentially shorter string that begins a commentyz{|}~} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~r !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~FNoneQReturn either a t or the number of spaces specified by tabSize in the IndentSettings. Note that if you actually want to insert a tab character (for example when editing makefiles) then you should use:  insertB '\t'.9Retrieve the current indentation settings for the buffer.A specialisation of F. This is the most basic and the user is encouraged to specialise  on their own.This takes two arguments the first is a function to obtain indentation hints from lines above the current one. The second is a function to obtain a set of indentation hints from the previous line. Both of these are in the  monad although the second seems like it is unnecessary. However we must take into account the length of tabs which come from the the tab settings and hence we must be in the  monad.To get the straightforward behaviour of the indents of all previous lines until one of them has zero indent call this with: ?autoIndentHelperB fetchPreviousIndentsB (fmap (: []) indentOfB) However commonly we wish to have something more interesting for the second argument, in particular we commonly wish to have the last opening bracket of the previous line as well as its indent.Cycles through the indentation hints. It does this without requiring to set/get any state. We just look at the current indentation of the current line and moving to the largest indent that is7A function generally useful as the first argument to . This searches the lines above the current line for the indentations of each line until we get to a line which has no indentation *and* is not empty. Indicating that we have reached the outer scope.An application of ! which adds more indentation hints using the given keywords. The offsets of the first set of keywords are used as hints. For the second set of keywords it is not the offsets of the keywords themselves but the offset of the first non-white characters after the keywords.IIn addition to the keyword hints we also do the same as the default (?) which is to use any non-closed opening brackets as hints.NReturns the position of the last opening bracket on the line which is not closed on the same line. Note that if we have unmatched parentheses such as "( ]" then we may not get the correct answer, but in that case then arguably we don't really care if we get the correct answer (at least if we get it wrong the user may notice their error). We return a list here as it's a convenient way of returning no hint in the case of there being no non-closed bracket and normally such a hint will be part of a list of hints anyway. NOTE: this could be easily modified to return the indentations of *all* the non-closed opening brackets. But I think this is not what you generally want. TODO: we also do not care whether or not the bracket is within a string or escaped. If someone feels up to caring about that by all means please fix this.Returns the offsets of all the given keywords within the given string. This is potentially useful as providing indentation hints.7Returns the offsets of anything that isn't white space afterE a keyword on the given line. This is essentially then the same as  except that for each keyword on the input rather than return the offset at the start of the keyword we return the offset of the first non-white character after the keyword.hReturns the indentation of a given string. Note that this depends on the current indentation settings.jReturns the length of a given string taking into account the white space and the indentation settings.Indents the current line to the given indentation level. In addition moves the point according to where it was on the line originally. If we were somewhere within the indentation (ie at the start of the line or on an empty line) then we want to just go to the end of the (new) indentation. However if we are currently pointing somewhere within the text of the line then we wish to remain pointing to the same character.#Indent as much as the previous line#Indent as much as the previous lineFInsert a newline at point and indent the new line as the previous one.nSet the padding of the string to newCount, filling in tabs if expandTabs is set in the buffers IndentSettingsxshifts right (or left if num is negative) num times, filling in tabs if expandTabs is set in the buffers IndentSettingsIIncreases the indentation on the region by the given amount of shiftWidthJReturn the number of spaces at the beginning of the line, up to the point.)Action to fetch hints from previous lines,Action to calculate hints from previous line Sets the indent behaviour, see  for a descriptionKeywords to act as hintsKeywords to act as offset hintsNoneQ8 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ GNoneMQLRun a command using the system shell, returning stdout, stderr and exit code[\  [\HNoneQINoneQ ]^_ ]^_JNoneQ$$$ KNoneQTurn a sequence of (from,style,to) strokes into a sequence of picture points (from,style), taking special care to ensure that the points are strictly increasing and introducing padding segments where neccessary. Precondition: Strokes are ordered and not overlapping.<Paint the given stroke-picture on top of an existing picture0Arrange a list of items in columns over maximum maxNumberOfLines lines(Arrange a list of items in columns over  numberOfLines lines.     Safe-InferredHMQA prototype. Typically the parameter will be a record type. Fields can be defined in terms of others fields, with the idea that some of these definitons can be overridden.Example: data O = O {f1, f2, f3 :: Int} deriving Show o1 = Proto $ \self -> O { f1 = 1, f2 = f1 self + 1, -- 'f1 self' refers to the overriden definition of f1 f3 = f1 self + 2 }Calling  o1 would then produce O {f1 = 1, f2 = 2, f3 = 3}.yGet the value of a prototype. This can return bottom in case some fields are recursively defined in terms of each other._Override a prototype. Fields can be defined in terms of their definition in the base prototype.Example: ]o2 = o1 `override` \super self -> super { f1 = f1 super + 10, f3 = f3 super + 1 } Field accessM Safe-InferredQ-Abstract theme that provides useful defaults.4A Theme inspired by the darkblue colorscheme of Vim.>NoneQ3Configuration record. All Yi hooks can be set here. UI to use.UI-specific configuration.*Actions to run when the editor is started.<Actions to run after startup (after startActions) or reload.Default keymap to use."List modes by order of preference.7Produce a .yi.dbg file with a lot of debug information.Set to  for an emacs-like behaviour.Set to `S for an emacs-like behaviour, where all deleted text is accumulated in a killring.List of layout managers for cycleLayoutManagersNext%Custom configuration, containing the YiConfigVariables. Configure with configVariableA.When should we use a "fat" cursor (i.e. 2 pixels wide, rather than 1)? Fat cursors have only been implemented for the Pango frontend. &Font name, for the UI that support it. &Font size, for the UI that support it.Style of scroll5Amount to move the buffer when using the scroll wheel/Should the scrollbar be shown on the left side?6Hide scrollbar automatically if text fits on one page.8Hide the tabbar automatically if only one tab is present<Wrap lines at the edge of the window if too long to display.kThe char with which to fill empty window space. Usually '~' for vi-like editors, ' ' for everything else. UI coloursA      !"#$%&'()*+,-./0123A      !"#$%&'()*+,-./0123A     '&%$#"! 3210/.-,+*)(!      !"#$%&'()*+,-./0123?None*+3BMQFThe Editor state5^Stack of all the buffers. Invariant: never empty Invariant: first buffer is the current one.7&Supply for buffer, window and tab ids.86current tab contains the visible windows pointed list.9dynamic components=Lcurrently highlighted regex (also most recent regex for use in vim bindings)?2Processed events that didn't yield any action yet.@@Actions to be run when the buffer is closed; should be scrapped.DThe initial stateH3Specifies the hint for the next temp buffer's name.`Create 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 orderfUReturn a prefix that can be removed from all buffer paths while keeping them unique.iFind buffer with this keyjFind buffer with this namek/Find buffer with given name. Fail if not found.lMake all buffers visible by splitting the current window list. FIXME: rename to displayAllBuffersE; make sure buffers are not open twice.m,Rotate the buffer stack by the given amount.nZPerform action with any given buffer, using the last window that was used for that buffer.o$Perform action with any given bufferp+Perform action with current window's buffersReturn the current buffertDisplay a transient messagew Set the "background" status linexClear the status line|Put string into yank register}(Return the contents of the yank register~(Dynamically-extensible state components.These hooks are used by keymaps to store values that result from Actions (i.e. that restult from IO), as opposed to the pure values they generate themselves, and can be stored internally.The 9 field is a type-indexed map.*Retrieve a value from the extensible state;Insert a value into the extensible state, keyed by its typeAAttach the next buffer in the buffer stack to the current window.CAttach the previous buffer in the stack list to the current window.7Like fnewE, create a new buffer filled with the String s, Switch the current window to this buffer. Doesn't associate any file with the buffer (unlike fnewE) and so is good for popup internal buffers (like scratch)/Creates an in-memory buffer with a unique name.A hint for the buffer naming scheme can be specified in the dynamic variable TempBufferNameHint The new buffer always has a buffer ID that did not exist before newTempBufferE. TODO: this probably a lot more complicated than it should be: why not count from zero every time?/Create a new zero size window on a given buffer*Create a new window onto the given buffer.1Attach the specified buffer to the current windowEAttach the specified buffer to some other window than the current onedSwitch to the buffer specified as parameter. If the buffer name is empty, switch to the next buffer.LClose a buffer. Note: close the current buffer if the empty string is given:Close current buffer and window, unless it's the last one.Rotate focus to the next window#Rotate focus to the previous windowKSwaps the focused window with the first window. Useful for layouts such as  HPairOneStack,, for which the first window is the largest.YMoves 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 oneA "fake" accessor that fixes the current buffer after a change of the current window. Enforces invariant that top of buffer stack is the buffer of the current window.XCounterpart of fixCurrentBufferA_: fix the current window to point to the right buffer.KReturn the windows that are currently open on the buffer whose key is given5bring the editor focus the window with the given key./Fails if no window with the given key is found.eSplit the current window, opening a second window onto current buffer. TODO: unfold newWindowE here?UCycle to the next layout manager, or the first one if the current one is nonstandard.YCycle to the previous layout manager, or the first one if the current one is nonstandard.Helper function for layoutManagersNext and layoutManagersPrevious8Next variant of the current layout manager, as given by Y<Previous variant of the current layout manager, as given by ZEnlarge the current windowShrink the current window2Sets the given divider position on the current tabDCreates a new tab containing a window that views the current buffer.4Moves to the next tab in the round robin set of tabs8Moves to the previous tab in the round robin set of tabsVMoves the focused tab to the given index, or to the end if the index is not specified.Deletes the current tab. If there is only one tab open then error out. When the last tab is focused, move focus to the left, otherwise move focus to the right.nClose the current window. If there is only one tab open and the tab contains only one window then do nothing.5Make the current window the only window on the screenDSwitch focus to some other window. If none is available, create one.Execute the argument in the context of an other window. Create one if necessary. The current window is re-focused after the argument has completed.CDefines an action to be executed when the current buffer is closed.aUsed by the minibuffer to assure the focus is restored to the buffer that spawned the minibuffer./todo: These actions are not restored on reload.todo: These actions should probably be very careful at what they do. TODO: All in all, this is a very ugly way to achieve the purpose. The nice way to proceed is to somehow attach the miniwindow to the window that has spawned it.456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`The buffer indentifier.The contents with which to populate the bufferabcdefghijklmnopqrstuvwxyz{|}~ buffer namebuffer contents456789:;<=>?@ABCDHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~BA456789:;<=>?@GFCEDWVUTSRQPONMLXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~HIJKv 456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NoneHMQ)Record presenting a frontend's interface.The functions  and  are both run by the editor's main loop, in response to user actions and so on. Their relation is a little subtle, and is discussed here:'to see some code, look at the function  refreshEditor in Yi.Core#. This is the only place where  and  are used. the function ! is responsible for updating the  with the width and height of the windows. Some frontends, such as Pango, need to modify their internal state to do this, and will consequently change their display. This is expected. the function Q should cause the UI to update its display with the information given in the .the functionalities of  and  overlap to some extent, in the sense that both may cause the frontend to update its display. The Yi core provides the following guarantees which the frontend may take advantage of:%in the main editor loop (i.e. in the  refreshEditor function), 0 will be run (possibly multiple times) and then [ will be run. This guarantee will hold even in the case of threading (the function  refreshEditor& will always be run atomically, using MVars).between the last run of  and the run of &, some changes may be made to the . However, the text, text attributes, and (displayed) window region of all windows will remain the same. However, the cursor location may change.QThis guarantee allows frontends which calculate rendering of the text during the 6 stage to avoid recalculating the render again during ). Pango is an example of such a frontend.OThe Yi core provides no guarantee about the OS thread from which the functions  and P are called from. In particular, subprocesses (e.g. compilation, ghci) will run  and  from new OS threads (see startSubprocessWatchers in Yi.Corei). The frontend must be preparaed for this: for instance, Gtk-based frontends should wrap GUI updates in  postGUIAsync. Main loop&Clean up, and also terminate if given true!Suspend (or minimize) the program#Refresh the UI with the given stateGUser force-refresh (in case the screen has been messed up from outside)Set window width and heightReload cabal project views   NNoneQ'Prefix matching function, for use with &Infix matching function, for use with Example: "abc" matches "a1b2c"Complete a string given a user input string, a matching function and a list of possibilites. Matching function should return the part of the string that matches the user string.Same as  , but maps  showFunction" on possible matches when printingaThis function attempts to provide a better tab completion result in cases where more than one file matches our prefix. Consider directory with following files: 5["Main.hs", "Main.hi", "Main.o", "Test.py", "Foo.hs"].After inserting Mai[ into the minibuffer and attempting to complete, the possible matches will be filtered in  to  ["Main.hs", "Main.hi", "Main.o"]M however because of multiple matches, the buffer will not be updated to say Main. but will instead stay at Mai.This is extremely tedious when trying to complete filenames in directories with many files so here we try to catch common prefixes of filtered files and if the result is longer than what we have, we use it instead. abc   abcONone+24HMQ#Start an input session with History.Finish the current input session with history.PNoneQXAlign each line of the region on the given regex. Fails if it is not found in any line.Get the selected region as a rectangle. Returns the region extended to lines, plus the start and end columns of the rectangle.$Split a list at the boundaries given    QNone+3Q @local name of the tag file TODO: reload if this file is changed>path to the tag file directory tags are relative to this pathmap from tags to filestrie to speed up tag hintingTFind the location of a tag using the tag table. Returns a full path and line numberdiSuper simple parsing CTag format 1 parsing algorithm TODO: support search patterns in addition to lineno"Read in a tag file from the system>Gives all the possible expanded tags that could match a given prefix0Extends the string to the longest certain lengthSet a new TagTableReset the TagTable&Get the currently registered tag tableefghdijklmefghdijklmRNone+BQ no   noSNoneQYA TabDescr describes the properties of a UI tab independent of the particular GUI in use.@None *+23468:BHMQ ^The type of user-bindable functions TODO: doc how these are actually user-bindable are they? Content of the top-level loop. !Startup when entering insert mode For insertion-only modes 3Startup bit, to execute only once at the beginning.all our threads input stream output stream%The only mutable state in the programwrite a/ returns a keymap that just outputs the action a.&6Shut down all of our threads. Should free buffers etc., withModeY f runs fd on the current buffer's mode. As this runs in the YiM monad, we're able to do more than with just |B such as prompt the user for something before running the action.=           !"#$Predicate to select exceptionsComputation to runHandler%&pqrstuvwxy'()*+,3           !"#$%&'()*+,3       *(') + ! "#$%& ,'           !"#$%&pqrstuvwxy'()*+,VNone+BMQ 3Take an /, and return the first 2+ and an ArticleDB - *without* that article.4Get the first article in the list. We use the list to express relative priority; the first is the most, the last least. We then just cycle through - every article gets equal time.5oWe remove the old first article, and we stick it on the end of the list using the presumably modified version.7KInsert a new article with top priority (that is, at the front of the list).8Serialize given / out.9Read in database from  and then parse it into an /.:=Returns the database as it exists on the disk, and the current Yi buffer contents. Note that the Default typeclass gives us an empty Seq. So first we try the buffer state in the hope we can avoid a very expensive read from disk, and if we find nothing (that is, if we get an empty Seq), only then do we call 9.; Given an /K, dump the scheduled article into the buffer (replacing previous contents).<~Go to next one. This ignores the buffer, but it doesn't remove anything from the database. However, the ordering does change.=LDelete current article (the article as in the database), and go to next one.>vThe main action. We fetch the old database, we fetch the modified article from the buffer, then we call the function  updateSetLastY which removes the first article and pushes our modified article to the end of the list.?kAssume 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./0123456789:;<=>?@A/0123456789:;<=>?2/01A@3456789:;<=>?/0123456789:;<=>?@AWNone3QC5Parse any character that can be inserted in the text.O optMod f ev produces a  that consumes ev or f evP#Convert a special key into an eventBCDEFGHIJKLMNOPQRSTUVR*+,-./0123456789:;<=>?@ABCDEFGHBCDEFGHIJKLMNOPQRSTUVBCEFHGIJPKQRSTUVLMNODBCDEFGHIJKLMNOPQRSTUVQRSTUVYNoneCHMQzFMake an action suitable for an interactive run. UI will be refreshed.YqStart up the editor, setting any state with the user preferences and file names passed in, and turning on the UI{7Display the errors buffer if it is not already visible.|]Process an event by advancing the current keymap automaton an execing the generated actions.ZQuit.}lUpdate (visible) buffers if they have changed on disk. FIXME: since we do IO here we must catch exceptions!~;Hide selection, clear "syntax dirty" flag (as appropriate).\Redraw]Suspend the program^pPipe a string through an external command, returning the stdout chomp any trailing newline (is this desirable?)Todo: varients with marks?6Same as msgEditor, but do nothing instead of printing ()a,Show an error on the status line and log it.bClose the current window. If this is the last window open, quit the program. CONSIDER: call quitEditor when there are no other window in the zY function. (Not possible since the windowset type disallows it -- should it be relaxed?)Kill a given subprocessc8Start a subprocess with the given command and arguments.zY{|Z}~[\]^_`abcdef*+,-./0123456789:;<=>?@ABCDEFGH8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~456789:;<=>?@ABCDHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,BCDEFGHIJKLMNOPQRSTUVYZ[\]^_`abcdefYZ\]f`ab^cd_e[zY{|Z}~[\]^_`abcdefZNone+BQTkEGlobal searching. Search for regex and move point to that position. Nothing* means reuse the last regular expression. Just s means use sP as the new regular expression. Direction of search can be specified as either Backward or Forwardi (forwards in the buffer). Arguments to modify the compiled regular expression can be supplied as well.lPut regex into regex registermClear the regex registern!Return contents of regex registerpSet up a search.qDo a search, placing cursor at first char of pattern, if found. Keymaps may implement their own regex language. How do we provide for this? Also, what's happening with ^ not matching sol?r2Search and Replace all within the current region. Note the region is the final argument since we might perform the same search and replace over multiple regions however we are unlikely to perform several search and replaces over the same region since the first such may change the bounds of the region.s,Peform a search and replace on the selectiont6Replace a string by another everywhere in the documentuSearch and replace in the given region. If the input boolean is True, then the replace is done globally, otherwise only the first match is replaced. Returns the number of replacements done.wOSearch and replace in the region defined by the given unit. The rest is as in v.{4Create a SearchExp that matches exactly its argument&Succesfully finish a search. Also see .Cancel a search. Also see . Wrapper over x that passes through the action and accepts the search as successful (i.e. when the user wants to stay at the result). Wrapper over  that passes through the action and marks the search as unsuccessful (i.e. when the user wants to jump back to where the search started).DEditor action describing how to end finish incremental search. The act parameter allows us to specify an extra action to run before finishing up the search. For Vim, we don't want to do anything so we use [ which just does nothing. For emacs, we want to cancel highlighting and stay where we are. Specialised  to do nothing as the action.DFind the next match and select it. Point is end, mark is beginning.&Replace all the remaining occurrences.Exit from query/replace..ghijklmnoNothingh means used previous pattern, if any. Complain otherwise. Use getRegexE to check for previous patterns"Flags to modify the compiled regexBackward or ForwardpqrThe String to search forThe String to replace it withThe region to perform this oversThe String to search forThe String to replace it withtuvwxyz{|}~&4567ghijklmnopqrstuvwxyz{|}~&lmnkgjih4765opq{rstvuwxyz~}|*gjihklmnopqrstuvwxyz{|}~[NoneQ\NoneQZRemove anything starting with uppercase letter. These denote either module names or types.Hoogle's output includes a sort of type keyword, telling whether a hit is a package name, syntax, a module name, etc. But we care primarily about the function names, so we filter out anything containing the keywords.tQuery Hoogle, with given search and options. This errors out on no results or if the hoogle command is not on path.Filter the output of  to leave just functions.Return module-function pairs. Call out to D, and overwrite the word at point with the first returned function. Call out to Z, and print inside the Minibuffer the results of searching Hoogle with the word at point.]None+BQWord completion[when doing keyword completion, we need to keep track of the word we're trying to complete.Switch out of completion mode.qTry to complete the current word with occurences found elsewhere in the editor. Further calls try other options.  ^NoneQ_NoneQC-wC-kKill the rest of lineC-yM-wM-yC-M-w`NoneQ?Readline-like movement bindings intended for minibuffer keymapsaNone+Q!for repeat and potentially macros"see Yi.Keymap.Vim2.vimEval comment8is set on $, allows j and k walk the right edge of lineslike vim's :help pasteafter C-o and one of v, V, C-v after C-o-char denotes how state got into insert mode (i, a, etc.)97 5  bNoneQ  cNoneQdNoneQeNoneQ  fNoneQ$All impure bindings will be ignored.        gNoneQ     hNoneQ    iNoneQ    jNoneQTkNoneQ%'a,'b   lNoneQBNone +246BJKMQ-What to prompt the user when asked this type?$Tag a type with a documentation'Open a minibuffer window with the given prompt and keymap The third argument is an action to perform after the minibuffer is opened such as move to the first occurence of a searched for string. If you don't need this just supply  return ()(#withMinibuffer prompt completer act: open a minibuffer with prompt. Once a string s is obtained, run act s.  completerK can be used to complete functions: it returns a list of possible matches./@withMinibufferGen proposal getHint prompt completer onTyping act: open a minibuffer with prompt, and initial content proposal. Once a string s is obtained, run act s.  completer can be used to complete inputs by returning an incrementally better match, and getHint can give an immediate feedback to the user on the current input. on Typingu is an extra action which will fire with every user key-press and receives minibuffer contents. Use something like const $ return () if you don't need this.08Open a minibuffer, given a finite number of suggestions.5Returns all the buffer names.5 !"#$%&'()*+,-./012345 !"#$%&'()*+,-./012345'(/0-.)*,+34521$%&#! ". !"#$%&'()*+,-./012345mNoneJKQ6Given a possible starting path (which if not given defaults to the current directory) and a fragment of a path we find all files within the given (or current) directory which can complete the given path fragment. We return a pair of both directory plus the filenames on their own that is without their directories. The reason for this is that if we return all of the filenames then we get a hint4 which is way too long to be particularly useful.7bGiven a path, trim the file name bit if it exists. If no path given, return current directory.8?Given a possible path and a prefix, return matching file names.:A simple wrapper to adjust the current indentation using the mode specific indentation function but according to the given indent behaviour.;0Generic emacs style prompt file action. Takes a prompt and a continuation act& and prompts the user with file hints.>For use as the hint when opening a file using the minibuffer. We essentially return all the files in the given directory which have the given prefix. 6789:;<=>?@A 6789:;<=>?@A 6789:;<=>?@A 6789:;<=>?@AnNone+Q\The full path to the directory being viewed FIXME Choose better data structure for Marks...-Map values are just leafnames, not full paths'keys are just leafnames, not full paths(position in the buffer where filename is<position on line where filename is (all pointA are this col):keep the position of pointer (for refreshing dired buffer).keep track of the num of successful operations"if True, DOChoice will be bypassed^Elementary operations for dired file operations Map a dired mark operation (e.g. delete, rename, copy) command into a list of DiredOps, and use procDiredOp to excute them. Logic and implementation of each operation are packaged in procDiredOp See askDelFiles for example. If new elem op is added, just add corresponding procDiredOp to handle it. no operation6to feedback, given the state. such as show the result.)prompt a string, provide keybindings for y, n, !, q and optional hb (help) this is useful when overwriting of existing files is required to complete the op choice !( will bypass following DOChoice prompts.prompt a string and collect user input. the embedded list of DiredOps is generated based on input, Remember that the input should be checked with DOCheck6this is a shortcut, it invokes DCChoice if file existsTsimilar to DOConfirm, but no user interaction. Could be used to check file existenceprompt a "yes/no" question. If yes, execute the first list of embedded DiredOps otherwise execute the second list of embedded DiredOps/remove the buffers that associate with the filehexecute the operations Pass the list of remaining operations down, insert new ops at the head if neededdelete a list of file in the given directory 1. Ask for confirmation, if yes, perform deletions, otherwise showNothing 2. Confirmation is required for recursive deletion of non-empty directry, but only the top level one 3. Show the number of successful deletions at the end of the excution 4. TODO: ask confirmation for wether to remove the associated buffers when a file is removedTWrite the contents of the supplied directory into the current buffer in dired formatMReturns a tuple containing the textual region (the end of) which is used for clickM detection and the FilePath of the file represented by that textual region WReturn 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 Tmove selected files in a given directory to the target location given by user inputif multiple source then if target is not a existing dir then error else move source files into target dir else if target is dir then if target exist then move source file into target dir else if source is dir and parent of target exists then move source to target else error else if parent of target exist then move source to target else errorTcopy selected files in a given directory to the target location given by user inputhaskCopyFiles follow the same logic as askRenameFiles, except dir and file are done by different DiredOPiExtract the filename at point. NB this may fail if the buffer has been edited. Maybe use Markers instead.c !"#$%&'()*+,-./0123456789:;<=>BCD    ?@ABCDEFGH IJKLMNOPQRSBCDBCD5 !"#$%&' ,+*)(-43210/.55555556789:;<=>BCD    ?@ABCDEFGH IJKLMNOPQRSUNoneQ .If file exists, read contents of file into a new buffer, otherwise creating a new empty buffer. Replace the current window with a new window onto the new buffer.EIf the file is already open, just switch to the corresponding buffer.YNeed to clean up semantics for when buffers exist, and how to attach windows to buffers.E*Revert to the contents of the file on diskFaTry to write a file in the manner of vi/vim Need to catch any exception to avoid losing bindingsG4Try to write to a named file in the manner of vi/vimHGTry to write to a named file if it doesn't exist. Error out if it does.IFWrite current buffer to disk, if this buffer is associated with a fileJ=Write a given buffer to disk if it is associated with a file.K Write current buffer to disk as f. The file is also set to fLWrite all open buffersMMake a backup copy of fileN=Associate buffer with file; canonicalize the given path name. .EFGHIJKLMN .EFGHIJKLMN .FGHIJLKMEN .EFGHIJKLMNoNoneQOPQRSTUVWXYTZU[ OPQRSTUVWXYZ[ OPQRSWXVYTZU[ OPQRSTUVWXYTZU[pNoneQVlike dd and d2vd WXYVZ[\\]^_`a\\W[ZVYX\\]^_`aqNoneQb!Show an error on the status line.iGShow the common error message about an unsaved file on the status line.]^_`abThe command name parser.-A parser for the remaining command arguments.The string to parse.ccddefghbi ]^_`abcdefghi abc]`_^defghi ]`_^abccddefghbirNoneQjefghjjjefghsNoneQkikkkitNoneQlllluNoneQmmmmvNoneQnjknnnjkwNoneQooooxNoneQplppplyNoneQqmnqqqmnzNoneQropqrsrrropqrs{NoneQssss|NoneQtttttt}NoneQuuvuuuuv~NoneQvwxvvvwxNoneHMQyHDetermines if the file's extension is one of the extensions in the list..When applied to an extensions list, creates a  function.NWhen applied to an extensions list and regular expression pattern, creates a  function.+Adds a hook to all matching hooks in a list0Apply a list of mode hooks to a list of AnyModessCheck whether a mode of the same name is already in modeTable and returns the original mode, if it isn't the case.zwxyz{|}~{ywxyz{|}~wx{|}~yzzwxyz{|}~{yNoneHMQNoneQNoneQ1Open a new buffer for interaction with a process.Topen a new buffer for interaction with a process, using any interactive-derived mode$Send the type command to the processSend command, recieve reply    None+BJKQqChanging the buffer name quite useful if you have several the same. This also breaks the relation with the file."shell-command with argument prompt#shell-command with a known argumentcabal-configurenRun the given commands with args and pipe the ouput into the build buffer, which is shown in an other window. cabal-build'Search the source files in the project.Perform a find+grep operationNoneQThe GHCi prompt always begins with ">"; this goes to just before it, or if one is already at the start of the prompt, goes to the beginning of the line. (If at the beginning of the line, this pushes you forward to it.)None+BHMQClever/ haskell mode, using the paren-matching syntax.HExperimental Haskell mode, using a rather precise parser for the syntax.|KReturns true if the token should be indented to look as "inside" the group.}Start GHCi in a bufferIReturn GHCi's buffer; create it if necessary. Show it in another window.Send a command to GHCiLoad current buffer in GHCi~|}  ~|}None+3BQHooks for the JavaScript mode.The "compiler."9Returns the JS verifier buffer, creating it if necessary.*Creates a new empty buffer and returns it.XGiven a filename, a BufferRef and a list of errors, prints the errors in that buffer.  NoneHMQsyntax-based latex modesyntax-based latex modeNoneQNoneQNoneQNone3MQVty screen sizeYCopy of the editor state, local to the UI, used to show stuff when the window is resized.$used to trigger redraw in renderLoop the picture currently displayed.cursor point on the aboveInitialise the uiClean up and go home'Redraw the entire terminal from the UI.;Construct images for the tabbar if at least one tab exists.7Determine whether it is necessary to render the tab bar7Calculate the lines a window can display from a buffer.%Return a rendered view of the window. Draw a windowTODO: horizontal scrolling.Renders text in a rectangle. This also returns * the index of the last character fitting in the rectangle * the position of the Point in (x,y) coordinates, if in the window, * the number of display lines for this drawing.jWe calculate the number of lines displayed for this window so that line wrapping doesn't break scrolling.eCalculate window heights, given all the windows and current height. (No specific code for modelines).Convert a Yi Attr into a Vty attribute change.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+The position of the first character to drawThe position of the cursor7The number of spaces to represent a tab character with.The data to draw. NoneQInitialise the uiNoneBHMQ4Fields that can be modified with all lens machinery.%The configuration monad. Run it with  configMain.Accessor for any !, to be used by modules defining cs. Such modules should provide a custom-named field. For instance, take the following hypothetical :~@newtype UserName = UserName { unUserName :: String } deriving(Typeable, Binary, Default) instance YiConfigVariable UserName8$(nameDeriveAccessors ''UserName (n -> Just (n ++ "A"))) userName ::   userName = unUserNameA   @7Here, the hypothetical library would provide the field userName to be used in preference to customVariable.XNone+BMQW{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.XBLoads a persistent state, and sets Yi state variables accordingly.BTrims per-command histories to contain at most N completions each..Trims VimTagStack to contain at most N values.QReads and decodes a persistent state in both strict, and exception robust way.WXWXXW WXNoneQThe class of "valid hooks". This class is exported abstractly, but the instances can be phrased quite simply: the functions (of arbitrarily many arguments, including zero) which run in either the  or  monads.)A typical example would be something likeInt -> String ->  String.ILooks 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.None +BJKMQ 1Config 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 .aEvaluator implemented by calling GHCi. This evaluator can run arbitrary expressions in the class  .-The following two imports are always present: 1import Yi import qualified Yi.Keymap as Yi.KeymapAlso, if the file $HOME/.config/yi/local/Env.hs#exists, it is imported unqualified.3Accessor for the published actions. Consider using .gPublish the given action, by the given name. This will overwrite any existing actions by the same name.QEvaluator 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 Prelude1doesn't require GHCi backend, so uses less memory          )(c) 2005,2007,2008 Jean-Philippe BernardyGPLNone 2346JKMQT[Quits the editor if there are no unmodified buffers if there are unmodified buffers then we ask individually for each modified buffer whether or not the user wishes to save it or not. If we get to the end of this list and there are still some modified buffers then we ask again if the user wishes to quit, but this is then a simple yes or no.[Quits the editor if there are no unmodified buffers if there are unmodified buffers then we ask individually for each modified buffer whether or not the user wishes to save it or not. If we get to the end of this list and there are still some modified buffers then we ask again if the user wishes to quit, but this is then a simple yes or no.kIs there a proper file associated with the buffer? In other words, does it make sense to offer to save it?}Quits the editor if there are no unmodified buffers if there are then simply confirms with the user that they with to quit.Insert next character, "raw"9Convert the universal argument to a number of repetitionseOpen a file using the minibuffer. We have to set up some stuff to allow hints and auto-completion..Open a file in a new tab using the minibuffer.FIf on separators (space, tab, unicode seps), reduce multiple separators to just a single separator. If we aren't looking at a separator, insert a single space. This kind of behaves as emacs just-one-space  function with the argument of 1  but it prefers to use the separator we're looking at instead of assuming a space.3Join this line to previous (or next N if universal)dShortcut to use a default list when a blank list is given. Used for default values to emacs queries7Prompt the user to give a tag and then jump to that tagOpens the file that contains tagR. Uses the global tag table and prompts the user to open one if it does not existCall continuation actS with the TagTable. Uses the global table and prompts the user if it doesn't exist(;(;NoneQ~Introduce a keymap that is compatible with both windows and osx, by parameterising the event modifier required for commands !"#$%&' !"#$%&'NoneQNoneQ  NoneQ ()*+,-./0123 ()*+,-./0123None39JKQ4Wrapper around 4D which also cancels incremental search. See issue #499 for details.   567894:            567894:None+234BQ;The action performed first<%The action performed before insertion=The position _before_ insertion>The position _after_ insertion?$The action performed after insertion The Vim keymap is divided into several parts, roughly corresponding to the different modes of vi. Each mode is in turn broken up into separate VimProcs for each phase of key input in that mode. Top level mode vim insert mode 6The given buffer action should be an insertion action. The given action should be a deletion action. The only well tested buffer actions are deleting one character, or one word, forward or backward. +?eval an ex command to an YiM (), also appends to the ex history@=write the current buffer, but only if modified (cf. :help :x)AcviSearch is a doSearch wrapper that print the search outcome. TODO: consider merging with doSearchBTry to do a substitution ,NLeave a mode. This always has priority over catch-all actions inside the mode.CNInsert mode is either insertion actions, or the meta (ESC) action TODO repeatDKeywordECall continuation actS with the TagTable. Uses the global table and prompts the user if it doesn't existFGHIJ;<=>?KLMNOPQRSTUVWXYZ[\]^_`abcdef      g      hijklmnopqrstuv      wx  yz{|}~      ! " # $ % & ' ( ) * +@AB , -C . / 0DE2F                        ! " # $ % & ' ( ) * + , - . / 02 F ) - ,              ! " # $ % & ' (          . 0 / * +cFGHIJ;<=>?KMLN WVUTSRQPOXYZ[\]^_`abcedf       g      hijklmnopqrstuv      wx  yz{|}~      ! " # $ % & ' ( ) * +@AB , -C . / 0DENone+BQ 6Start Abella in a buffer 7KReturn Abella's buffer; create it if necessary. Show it in another window. 8Send a command to Abella 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 6 3 4 5 7 8 1 2 3 4 5 6 7 8None +23468BQ o:Convert snippet description list into a SuperTab extensionB 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 z8 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 pG D @ C B A 9 = ; : > ? > ? < > ? < z L M N I J K y x w v u O P Q R S G H t s r T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m E F q n o p3 9 = ; : > ? > ? < > ? < @ C B A 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 VNoneQ { | { | { | { |NoneMQ } ~   OPQR } ~   OPQR } ~  } ~   NoneQList of published ActionsQInput preprocessor: Transform Esc;Char into Meta-Char Useful for emacs lovers ;)5Open an emacs-like scratch buffer if no file is open.      NoneQ"Argument parsing. Pretty standard. jConfiguration information which can be set in the command-line, but not in the user's configuration file.2List of editors for which we provide an emulation. usage string. usage string. !Transform the config with options@Update the default configuration based on a command-line option. nStatic main. This is the front end to the statically linked application, and the real front end, in a sense.  dynamic_mainC calls this after setting preferences passed from the boot loader.          TNoneQ-"reloads" the configurationSerializes the editor state and relaunches Yi using the serialized state. The launch of Yi will result in recompilation of the user's custom yi. This, in effect, "reloads" the configuration.nonce the custom yi is compiled this restores the editor state (if requested) then proceeds to run the editor.{If the custom yi compile produces errors or warnings then the messages are presented as a separate activity in the editor.gThe use of a separate activity prevents any other initial actions from immediately masking the output. Used by both the yi executable and the custom yi that is built from the user's configuration. The yi executable uses a default config.- -  -- NoneHMQ" XStarts with the given initial config, makes the described modifications, then starts yi. ISets the frontend to the first frontend from the list which is installed.AAvailable frontends are a subset of: "vty", "pango", and "batch". &Sets the frontend, if it is available. xAdds the given key bindings to the `global keymap'. The bindings will override existing bindings in the case of a clash. modeBindKeys mode keys adds the keybindings in keys$ to all modes with the same name as mode.As with  ~, a mode by the given name must already be registered, or the function will have no effect, and issue a command-line warning. modeBindKeysByName name keys adds the keybindings in keys to all modes with name name' (if it is registered). Consider using   instead. MRegister the given mode. It will be preferred over any modes already defined. modifyMode mode f* modifies all modes with the same name as mode, using the function f.Note that the mode argument is only used by its . In particular, a mode by the given name must already be registered, or this function will have no effect, and issue a command-line warning.   mode f =   ( mode) f modifyModeByName 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. 6Amount to move the buffer when using the scroll wheel.  the scroll style, or  for default. See  for documentation. (Which side to display the scroll bar on. Should the scroll bar autohide? Should the tab bar autohide? Should lines be wrapped? nThe character with which to fill empty window space. Usually '~' for vi-like editors, ' ' for everything else. UI colour theme. ^List of registered layout managers. When cycling through layouts, this list will be consulted. 2Produce a .yi.dbg file with debugging information? aRun when the editor is started (this is run after all actions which have already been registered)List version of  . }Run after the startup actions have completed, or on reload (this is run after all actions which have already been registered)List version of  . :Actions to run when the editor is started. Consider using   or  instead. 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 5 for an emacs-like behaviour. Consider starting with  ,  , or   to instead. Set to `j for an emacs-like behaviour, where all deleted text is accumulated in a killring. Consider starting with  ,  , or   instead. ?(    *+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx45678DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-.BCDEFGHIJKLMNOPQRSTUVYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6789:;<=>?@ABCDEFGHIJKLMN 2    &     LNoneQ*+,-./0123456789:;<=>?@ABCDEFGH45678DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-.BCDEFGHIJKLMNOPQRSTUVYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6789:;<=>?@ABCDEFGHIJKLMN                                          ! " # $ % &'()*+,-./0123 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-../01233456789::;<=>?@ABCDDEFGHIJKLMNOPQRSTUVWWXYZ[\]^_`abcdeefghiijklmmnopqrstuvwxyz{|}~d     !-!-!!!!!!B!!""############################$$%%&&''((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))) ) ) ) ) ))))))))))))))))))) )!)")#)$)%)))#))&)'**(**)*****+*,*-*.***/*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-f-p-q------...///0011111111r11111111223344556677889s9t:::u:v::::&:w:x:y:z:{:':|:s:}:~:t::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;~;;;};s;';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<u<<<<<<<<<<<<<<<<===u=v====y='=s=~=}=t======>????????@ @ @ @L@ @ @ @@@@@@@AB !"#$%&'()*+,-.//00123Y456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEE A A A A AAAAAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:A;A<A=A>A?A@AAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA[A\A]A^A_A`AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzA{A|A}A~AAAAAAFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKMMM>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > > > >>>>>>>>>>>>>>>>>>> >!>">#>$>%>&??'?(?)?*?+?,?-?.?/?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?{?|?}?~????????????????????????????????????????NNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRSSSSSSS@ @@@@@@@@@@@@@L@@@@@@@@@i@@@ @ @ @ @ @@@@@@@TUVVVVVVVVVV V!V"V#V$V%V&V'V(V)W*W+W,W-WW.W/W0W1W2W3W4W5W6W7W8W9W:W;W<W=X>X?Y@YAYBYCYDYEYFYGYHYIYJYKYLYZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ[Z\Z]Z^Z_Z`ZaZbZcZdZeZfZgZhZiZjZkZlZmZn[o[p\q\r\s\t\u\v\w]x]y]z]{]|]}]~]]]^________`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaaaaaaaaaaaaaaaaaaabbbbbbccccccccccccccccccccccdeeeeeeeeeefffffffffffffghijkkkkkkkkkkkkkllBBBBBBBBBBBBBBB B B B B BBBBBmmmmmmmmmmmmnn n!U"U#U$U%U&U'U(U)U*U+o,o,o-o.o/o0o1o2o3o4o5o6o7p8q9q:q;q<q'q=q>q?q@qAqBqCqDr's't'u'v'w'x'y'z'{'|'}'~'EFGHIJKLMNOPQRSTUVWXYZ[\]^_`aabcdefghijklmmnopqrstuvwxyz{|a}i~'X'                              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 7 8 9 : ; < = > ? @ A B C D E F G H I J J K L M NT OT P Q R S T U V W X Y Zw [ \ ] ^ _ ` 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 { | } ~      {                                                    HI 9 R 1                          ! " # $ % & ' ( ) * +  ,  -  .  /  0 1 2 3 4 5   6  6  ,  -  .  /  0 7 8 9 : ; < = > ? @ A B C D E F G 1 H I 1 H J K L M N O  P M N Q R S T  U  V  W  P  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 1 2 x y z { | } ~        1 1                                                    -                 N            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8] 9 : ; <  = > ? @ A @ B C D C 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 { | } ~                  " " " "" " " # @# A# @# B# C# D# C# E# F# G# H# I# J# K# L# M# N# O# P# Q# R# S# T# U# V# W# X# Y# [# # # # # # # # # # # # # # # # \# ]# ^# _# `# a# b# c$ $ @$ $ $ A$ @$ B$ C$ D$ C$ 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% @% A% @% B% C% D% C% 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& @& A& @& B& C& D& C& 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' @' A' @' B' C' D' C' 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( ( @( ( ( A( @( B( C( D( C( E( F( G( H( I( J( K( L( M( N( O( P( Q( R( S( T( U( V( W( X( Y( ( [( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( \( ]( ^( _( `( a( ( ( ( ( ( b( c)w)x) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )  1 2 ) ) )    ) ) ) ) ) ) ) ) ) ) ) ))))) ) ) ) ) ) ) ) ) ) ) !) ") #) $) %) &) ') () )) *) +) ,) -) .) /) 0) 1) 2) 3) 4* 1 5 6* 7* 8* @* A* @* B* C* D* C* E* F* G* H* I* J* K* L**f* 9** M* N* O* P* Q* R* :* S* T* U* V* W* X* Y* ;* <* [* * * * * * * * * * * * * * * * * * * \* ]* ^* _* `* a* b* c+ @+ A+ @+ B+ C+ D+ C+ 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, @, A, @, B, C, D, C, 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- @- A- @- B- C- D- C- 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. . @. . . A. @. B. C. D. C. E. F. G. H. I. J. K. L. =. >. ?. @. A. M. N. O. P. Q. R. S. T. U. V. W. X. Y. 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/ / @/ / / A/ @/ B/ C/ D/ C/ E/ F/ G/ H/ I/ J/ K/ L// a/ b/ c/ d/ e/ f/ M/ N/ O/ P/ Q/ R/ S/ T/ U/ V/ W/ X/ Y/"/ g/ h/ i/ j/ Z/ [/ / / / / / / / / / / / / / / / / / / / / / / \/ ]/ ^/ _/ `/ a/ / / / / / b/ c0 0 @0 0 0 A0 @0 B0 C0 D0 C0 E0 F0 G0 H0 I0 J0 K0 L000 k0 l0 m0 n0 o0 M0 N0 O0 P0 Q0 R0 S0 T0 U0 V0 W0 X0 Y00 p0 q0 r0 Z0 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \0 ]0 ^0 _0 `0 a0 0 0 0 0 0 b0 c1 @1 A1 @1 B1 C1 D1 C1 E1 F1 G1 H1 I1 J1 K1 L11 M1 N1 O1 P1 Q1 R1 S1 T1 U1 V1 W1 X1 Y1 1 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 \1 ]1 ^1 _1 `1 a1 b1 c2 @2 A2 @2 B2 C2 D2 C2 E2 F2 G2 H2 I2 J2 K2 L222 M2 N2 O2 P2 Q2 R2 S2 T2 U2 V2 W2 X2 Y2 s2 t2 u2 2 v2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 \2 ]2 ^2 _2 `2 a2 b2 c3 3 @3 3 3 A3 @3 B3 C3 D3 C3 E3 F3 G3 H3 I3 J3 K3 L333 w3 x3 y3 z3 {3 |3 }3 ~3 3 3 3 M3 N3 O3 P3 Q3 3 3 3 3 R3 S3 T3 U3 V3 W3 X3 Y3 3 3 3 3 3 3 3 3 3 Z3 [3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 D3 E3 F3 G3 H3 I3 J3 K3 L3 M3 \3 ]3 ^3 _3 `3 a3 3 3 3 3 3 b3 c4 @4 A4 @4 B4 C4 D4 C4 E4 F4 G4 H4 I4 J4 K4 L444 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 [4 4 4 4 4 4 4 4 4 \4 ]4 ^4 _4 `4 a4 b4 c5 @5 A5 @5 B5 C5 D5 C5 E5 F5 G5 H5 I5 J5 K5 L555 M5 N5 O5 P5 Q5 R5 S5 T5 U5 V5 W5 X5 Y5 Z5 [5 5 5 5 5 5 5 5 5 5 5 5 5 5 \5 ]5 ^5 _5 `5 a5 b5 c6 @6 A6 @6 B6 C6 D6 C6 E6 F6 G6 H6 I6 J6 K6 L666 M6 N6 O6 P6 Q6 R6 S6 T6 U6 V6 W6 X6 Y6 Z6 [6 6 6 6 6 6 6 6 6 6 6 \6 ]6 ^6 _6 `6 a6 b6 c7 7 @7 7 7 A7 @7 B7 C7 D7 C7 E7 F7 G7 H7 I7 J7 K7 L777 7 7 M7 N7 O7 P7 Q7 R7 S7 T7 U7 V7 W7 X7 Y7 7 Z7 [7 7 7 7 7 \7 ]7 ^7 _7 `7 a7 7 7 7 7 7 b7 c8 @8 A8 @8 B8 C8 D8 C8 E8 F8 G8 H8 I8 J8 K8 L888 M8 N8 O8 P8 Q8 8 8 R8 S8 T8 U8 V8 W8 X8 Y8 Z8 [8 8 \8 ]8 ^8 _8 `8 a8 b8 c9 9 9 9 9 99 9 9 9 9}9~9 9 9 9 9 1 5                                                                              C C C C D D D   D D D D D D D D D D E E E G G I I I    N N N Q Q Q Q Q Q Q Q Q Q R R @ @ @ @ @ @ @ @ @ @ Y Y !Y "Y #Y $Y %Y &Y 'Y (Y )Y *Y +Y ,Y -Y .Y /Y 0Z 1Z 2Z 3Z 3Z 4Z 5Z 6Z 7Z 8Z 9Z :Z ;[ <] =] =] >] ?] @] A] B] C] D] E^ F^ Ga Ha Ia Ja Ka La Ma Na Ob Pb Qb Rb Se Te Ue Ve We Xe Ye Ze [e \e ]e ^e _e `f af bf cg dg eg fg gg hg ig jg kg lg mg nh dh oh kh lh ph qh ri si tj uj vj el wB xB yB zB {B |B }B ~B B B B B B B B B B B B B B B B B B B B B n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n o o p p p p p p p p p sp p p qHq q rrrrsvvxyy z zz z z |}}~~ !"#$%&'()*+,-../012^3456789:;<=>?@ABCDEFGHIJ sKL7@M45N=6OPQRSTUVWX YZ[\]^_`abcdefgghijklmnopqrs 1 2tXuXvXwXxXxXyXzX{X|X}X}X~XXXX m e kA       !"#$%&'()*+,-./012T3T4 1 5 1 6789:;<yi-0.8.1Yi.MonadYi.Char.UnicodeYi.Keymap.Vim2.MatchResultYi.Keymap.Vim2.DigraphYi.Keymap.CompletionYi.IncrementalParseYi.DebugYi.Event Yi.LayoutYi.Config.Misc Yi.StringYi.Utils Yi.Dynamic Yi.InteractYi.Paths Yi.UI.CommonYi.Buffer.Basic Yi.Region Yi.KillRing Yi.JumpList Yi.WindowYi.TabYi.RegexYi.Style Yi.SyntaxYi.Buffer.Misc Yi.BufferYi.Buffer.Undo Yi.Lexer.AlexYi.Lexer.CompilationYi.Syntax.TreeYi.Syntax.OnlineTreeYi.Syntax.DriverYi.Syntax.LayoutYi.Lexer.AbellaYi.Lexer.Cabal Yi.Lexer.CYi.Lexer.ObjectiveCYi.Lexer.CplusplusYi.Lexer.HaskellYi.Syntax.HaskellYi.Lexer.JavaScript Yi.Lexer.Java Yi.Lexer.JSONYi.Lexer.LatexYi.Lexer.LiterateHaskellYi.Lexer.GitCommitYi.Lexer.GNUMakeYi.Lexer.OCaml Yi.Lexer.Ott Yi.Lexer.PerlYi.Lexer.Python Yi.Lexer.Ruby Yi.Lexer.SrmcYi.Lexer.SVNCommitYi.Lexer.WhitespaceYi.Syntax.Strokes.HaskellYi.Syntax.ParenYi.Syntax.JavaScriptYi.Verifier.JavaScriptYi.Syntax.Latex Yi.Config Yi.Editor Yi.KeymapYi.Buffer.HighLevel Yi.MiniBufferYi.Buffer.RegionYi.Buffer.TextUnitYi.Buffer.NormalYi.Buffer.Indent Yi.ProcessYi.Keymap.Vim2.StyledRegionYi.Keymap.Vim2.TextObjectYi.Mode.Haskell.Dollarify Yi.UI.UtilsYiYi.Style.Library Yi.Completion Yi.History Yi.RectangleYi.TagYi.Keymap.Vim.TagStack Yi.UI.TabBarYi.BootYi.File Yi.IReaderYi.Keymap.KeysYi.PersistentStateYi.Core Yi.SearchYi.Keymap.Vim2.Search Yi.HoogleYi.TextCompletionYi.Mode.BuffersYi.Keymap.Emacs.KillRingYi.Keymap.ReadlineYi.Keymap.Vim2.CommonYi.Keymap.Vim2.EventUtilsYi.Keymap.Vim2.StateUtilsYi.Keymap.Vim2.EvalYi.Keymap.Vim2.MotionYi.Keymap.Vim2.UtilsYi.Keymap.Vim2.InsertMapYi.Keymap.Vim2.ReplaceMap#Yi.Keymap.Vim2.ReplaceSingleCharMapYi.Keymap.Vim2.SearchMotionMapYi.Keymap.Vim2.Ex.TypesYi.Keymap.Vim2.Ex.EvalYi.MiscYi.DiredYi.Keymap.Vim2.Operator'Yi.Keymap.Vim2.NormalOperatorPendingMap!Yi.Keymap.Vim2.Ex.Commands.Common!Yi.Keymap.Vim2.Ex.Commands.Buffer"Yi.Keymap.Vim2.Ex.Commands.Buffers'Yi.Keymap.Vim2.Ex.Commands.BufferDelete!Yi.Keymap.Vim2.Ex.Commands.DeleteYi.Keymap.Vim2.Ex.Commands.Edit#Yi.Keymap.Vim2.Ex.Commands.GotoLineYi.Keymap.Vim2.Ex.Commands.Nohl Yi.Keymap.Vim2.Ex.Commands.PasteYi.Keymap.Vim2.Ex.Commands.Quit!Yi.Keymap.Vim2.Ex.Commands.Reload%Yi.Keymap.Vim2.Ex.Commands.Substitute!Yi.Keymap.Vim2.Ex.Commands.Global Yi.Keymap.Vim2.Ex.Commands.WriteYi.ModesYi.Mode.IReaderYi.Mode.CompilationYi.Mode.Interactive Yi.Command Yi.Mode.GHCiYi.Mode.HaskellYi.Mode.JavaScript Yi.Mode.LatexYi.Keymap.Vim2.NormalMapYi.Keymap.Vim2.VisualMap Yi.Keymap.Vim2.Ex.Commands.Cabal Yi.UI.Vty Yi.UI.BatchYi.Config.Simple.TypesYi.HooksYi.EvalYi.Keymap.Emacs.Utils Yi.Keymap.CuaYi.Keymap.Vim2.Ex.Commands.YiYi.Keymap.Vim2.ExYi.Keymap.Vim2.ExMapYi.Keymap.Emacs Yi.Keymap.VimYi.Mode.Abella Yi.SnippetsYi.Snippets.HaskellYi.Keymap.Vim2Yi.Config.DefaultYi.MainYi.Config.SimpleShim.ProjectContent Data.TrieParser.Incremental Shim.UtilsData.DelayList Control.ExcSystem.CanonicalizePathSystem.FriendlyPathShim.CabalInfoPaths_yiPreludenub Data.RopeYi.Buffer.ImplementationIndentBehaviourData.PrototypeMode modeApplies mtl-2.1.3.1Control.Monad.State.Classgetsgreeksymbols checkAmbsdisamb subscripts superscripts MatchResult WholeMatch PartialMatchNoMatchlookupBestMatch matchesString$fShowMatchResult$fAlternativeMatchResult$fApplicativeMatchResultcharFromDigraph defDigraphsCompletionTreeCT listToTreestepTreeobvious mergeTreescompleteParserEnterYuckLooksymboleoftestNextlookNext recoverWith initDebugtraceerror logPutStrLnlogError logStreamtraceMtraceM_EventKeyKTabKEnterKRightKDownKLeftKMenuKUpKNP5 KPageDownKEndKDelKPageUpKHomeKInsKBSKASCIIKPauseKPrtScrKFunKEscModifierMHyperMSuperMMetaMCtrlMShift prettyEvent eventToCharLayoutM Transposed Transposable transpose RectanglerectXrectY rectWidth rectHeightAnyLayoutManager LayoutManager pureLayoutdescribeLayout nextVariantpreviousVariant RelativeSizeDividerPosition DividerRef OrientationVertical HorizontalLayoutPairdivPosdivRefpairFstpairSndStack orientationwins SingleWindowdividerPositionAlayoutManagerSameTypetallwide slidyTall slidyWide hPairNStack vPairNStacklayoutToRectangles singleWindowpairstack evenStack runLayoutMRefreadRefwriteRef modifyRef getsAndModify modifiesRefreadsRef writesRefmodifiesThenReadsRefwithwhenMmaybeM repeatUntilM ScrollStyle SingleLine SnapToCenter capitalizecapitalizeFirstchomp dropSpaceisBlankfillTextunlines'lines'mapLinesonLinespadLeftpadRightSemiNum+~-~~-iofst3snd3trd3 singletonlistnubSet mapAdjust'mapFromFoldablegroupBy'chain commonPrefixfindPL swapFocusdummyPutdummyGetmakeLensesWithSuffix$fBinaryHashMap DynamicValues YiVariableConfigVariablesYiConfigVariableconfigVariableA dynamicValueA InteractStateRunningDeadWaiting AmbiguousPChainEndI MonadInteractwrite eventBoundsadjustPriorityPEqequiv deprioritize<||||>acceptedrunWriteprocessOneEvent computeStateoneOfanyEvent eventBetweeneventeventschoiceoption mkAutomaton idAutomaton getConfigDir getDataPath getConfigPathgetCustomConfigPathgetConfigFilenamegetConfigModulesgetArticleDbFilenamegetPersistentStateFilenamegetEvaluatorContextFilenameUI DirectionForwardBackward WindowRef unWindowRefSizefromSizePoint fromPoint BufferRefMarkmarkId reverseDir mayReverse directionElim fromString$fDefaultWindowRef$fSemiNumPointSize $fShowPoint$fShowBufferRef$fBinaryDirectionRegionregionDirection regionStart regionEnd regionFirst regionLast fmapRegion regionSizeintersectRegion unionRegionmkRegion mkRegion' mkSizeRegion emptyRegioninRegion nearRegionincludedRegion regionIsEmptyregionsOverlapKillringkrKilled krContentskrEmptykrEndCmdkrPutkrSetkrGetJumpjumpMark jumpBufferRefJumpListaddJumpjumpBack jumpForwardWindowisMinibufkey bufAccessListheight winRegionwkey actualLinesjumpListwinkey dummyWindow $fEqWindow $fShowWindow$fBinaryWindowTabtkey tabLayoutTabReftabFocustabMiniWindows tabWindowsAtabLayoutManagerAtabDividerPositionA mapWindowsforceTabtabFoldlmakeTabmakeTab1 SearchOption QuoteRegex NoNewLine IgnoreCase SearchExpseInput seCompiledseBackCompiled seOptions searchString searchRegexmakeSearchOptsMregexEscapeString emptySearch emptyRegexColorDefaultRGB StyleNameUIStylemodelineAttributesmodelineFocusStyletabBarAttributestabInFocusStyletabNotFocusedStylebaseAttributes selectedStyleeofStyle errorStyle hintStylestrongHintStyle commentStyleblockCommentStyle keywordStyle numberStylepreprocessorStyle stringStylelongStringStyle typeStyledataConstructorStyle importStyle builtinStyle regexStyle variableStyle operatorStyle quoteStylemakeFileActionmakeFileRuleHeadStyle Attributes foreground background reverseAttrbolditalic underlineemptyAttributeswithFgwithBgwithBdwithItlc withUnderline withReverse defaultStyle colorToTextblackgrey lightGreydarkredred darkgreengreenbrownyellowdarkbluebluepurplemagentadarkcyancyanwhite brightwhiteCacheScannerscanInit scanLooked scanEmptyscanRunExtHL HighlighterSynHL hlStartStatehlRun hlGetTreehlFocusSpan spanBegin spanContentsspanEndStrokeLength skipScanner emptyFileScan mkHighlighter noHighlighter MarkValue markPoint markGravityUpdateDeletedeleteUpdateStringInsert updatePointupdateDirectioninsertUpdateStringOverlayOvlLayer HintLayer UserLayerUIUpdate StyleUpdate TextUpdateupdateIsDelete mkOverlayBufferM fromBufferMFBufferChange AtomicChangeInteractivePointURListemptyU addChangeUsetSavedFilePointUundoUredoUisAtSavedFilePointUASIPosnposnOfsposnLineposnColToktokTtokLentokPosn AlexStatestLexer lookedOffsetstPosn AlexInput tokToSpantokFromTtokBegintokEnd tokRegion startPosnmoveStr alexGetChar alexGetBytealexCollectCharalexInputPrevChar actionConstactionAndModifyactionStringAndModifyactionStringConst lexScanner unfoldLexerStatescannerTokenTextReport initState alexScanTokenIsTreesubtreesuniplate emptyNode toksAfterallToks tokAtOrBefore toksInRegiontokenBasedAnnotstokenBasedStrokesfromNodeToFinalfromLeafToLeafAfter getLastPathgetAllSubTreesgetFirstElementgetLastElementgetFirstOffset getLastOffset subtreeRegionsepBysepBy1TreeTipLeafBinmanyTokspath cachedStatesrootfocusedPathunzipFM zipWithFM layoutHandlerTT UnrecognizedSkip CommentLine ReservedOpReserved ConsIdentVarIdentNumberOtherOpDotDoubleRightArrow RightArrow BackSlashAndOrOtherExistsForallHlState tokenToStyle tokenToText isComment CppDirectiveTHQuoteCommentOperator ConsOperatorSpecial StringTokCharTokOpTypeTildaArobase DoubleDot DoubleColon LeftArrowEqualPipe ReservedTypeInstanceClassModuleDeriving OtherLayoutOfDoInLetWhereTypeNewTypeDataImportAs QualifiedHiding CommentTypeLineCloseOpen startsLayout isSpecial isErrorTokExpPInPLetDCTCPGuard'PGuardContextModidOptRHSPErrorerrorTokmarker commentListPWhereExprPAtomBlockParenPClasscKeywordcHeadcwherePData'dataConsPData dataKeyword dtypeConsdEqualdataRhsPType typeKeywordtypeConsequalbtypeTSPImport importKeywordqualname'as specification PModuleDecl moduleKeywordnameexports whereKeywordBodyimportscontent extraContentProgModmodDeclbodyPModulecommentsprogMod indentScannerparseConst ValidNameOpRexStrResUnknownQualify'BitNot' RightShiftZ' RightShift' LeftShift'BitXor'BitOr'BitAnd'Not'Or'And'NotEqualsType' EqualsType'LTE'LT'GTE'GT' NotEquals'Equals' ModuloAssign' DivideAssign'MultiplyAssign'SubtractAssign' AddAssign'Assign' Decrement' Increment'Modulo'Divide' Multiply' Subtract'Add' Undefined'Null'False'True'With'While'Void'Var'TypeOf'Try'Throw'This'Switch'Return'New' InstanceOf'In'If' Function'For'Finally'Else'Do'Delete'Default' Continue'Catch'Case'Break'prefixOperatorspostfixOperatorsinfixOperators NewCommandBeginCommandIndentReserved getStrokes tokenToAnnotErrorAtomisBrace ignoredTokenisNoisegetIndentingSubtreegetSubtreeSpanparse' tokenToStroke modStrokeerrTok $fIsTreeTreeKeyValue KeyValueErrArrayArrErrArrRestArrContExprErrPostExprExprArrExprCondOpExpr ExprFunCall ExprTypeOf ExprAnonFun ExprParen ExprSimpleExprNew ExprPrefixExprObj VarDecAssAssErrAssRstAssBegBlockErrBlockOne ForContentForErrForIn ForNormalParExpr ParExprErr ParametersParErr StatementCommWithElseIfForDoWhileWhileReturnVarDeclFunDecl SemicolonBListFailablestupid hasFailed Strokable toStrokesnormalonenError failStroker statementblockstmtExpropExpr expressionarray semicolon parametersparExprcommentpreOpinOppostOpopTok simpleTokstrToknumTokbooleanresspcoperplzTokplzSpcplzExprplzanythinghate fromBlockfirstTok errorTokenisErrortoTTfromTT$fStrokableArray$fStrokableTok$fStrokableKeyValue$fStrokableParExpr$fStrokableParameters$fStrokableExpr$fStrokableVarDecAss$fStrokableBlock$fStrokableForContent$fStrokableStatement$fFailableKeyValue$fFailableExpr$fFailableParExpr$fFailableParameters$fFailableVarDecAss$fFailableBlock$fFailableForContent$fIsTreeStatementWarnErrWarningUnreachableCodeMultipleFunctionDeclarationverifycheckMultipleFunscheckUnreachablettEqsayisReturn findFunctionsfunNamefunBodynameOf dropWhile'dupsBy $fShowReport $fShowWarning $fShowErrorisBeginisEndConfig MonadEditoraskCfg withEditorEditorM fromEditorMEditor runEditorYiMrunYiM KeymapSet KeymapProcess KeymapEndoKeymapKeymapMInteractActionextractTopKeymap withBuffer emptyActiontoggleCommentSelectionBwithMinibufferFreeMarkSetfromMarkinsMarkselMarkWinMarksBufferId DecreaseOnly IncreaseOnly DecreaseCycle IncreaseCyclemodeNamemodeHL modePrettify modeKeymap modeIndentmodeAdjustBlock modeFollowmodeIndentSettingsmodeToggleCommentSelectionmodeGetStrokesmodeGetAnnotations modePrintTree modeOnLoad modeModeLineAnyModeIndentSettings expandTabstabSize shiftWidthbmodeshortIdentString identStringminiIdentStringidentA clearSyntaxlastActiveWindowA lastSyncTimeAundosA readOnlyA insertingApointFollowsWindowAfile setPrefCol getPrefColpendingUpdatesAhighlightSelectionArectangleSelectionAkeymapProcessA getModeLine getPercent addOverlayB delOverlayBdelOverlayLayerB runBuffergetMarks runBufferFull getMarkValueBnewMarkB deleteMarkBrunBufferDummyWindow markSavedBbkeyisUnchangedBufferstartUpdateTransactionBcommitUpdateTransactionBundoBredoBmodeAlwaysAppliesmodeNeverApplies emptyModenewBsizeBpointBnelemsBnelemsB'streamBindexedStreamBstrokesRangesBmoveTo setInsertingrevertPendingUpdatesBwriteBwriteNnewlineB insertNAt' insertNAtinsertNinsertN'insertB deleteNAtcurLn markLinesgotoLnsetMode0 setAnyModesetMode modifyModeonMode withMode0 withModeB withSyntaxB focusSyntax withSyntaxB' regexRegionBregexB setMarkPointB modifyMarkB setMarkHereBsetNamedMarkHereBsetVisibleSelectionaskMarksgetMarkB mayGetMarkBmoveNleftBleftNrightBrightN lineMoveRelmovingToPrefCol moveToColBmoveToLineColBpointOfLineColBforgetPreferCol savingPrefCollineUplineDownelemsBreadBreadAtB replaceCharBreplaceCharWithBelowBreplaceCharWithAboveBinsertCharWithBelowBinsertCharWithAboveBdeleteNcurColcolOflineOf lineCountB solPointB gotoLnFrombufferDynamicValueAsavingExcursionB getMarkPointB savingPointBpointAtpointAfterCursorBdestinationOfMoveB askWindowwithEveryLineBmodeAdjustBlockA modeAppliesA modeFollowAmodeGetAnnotationsAmodeGetStrokesAmodeHLA modeIndentAmodeIndentSettingsA modeKeymapA modeModeLineA modeNameA modeOnLoadA modePrettifyAmodePrintTreeAmodeToggleCommentSelectionA winRegionB deleteRegionB readRegionB readRegionB'replaceRegionBreplaceRegionB'replaceRegionClever mapRegionB swapRegionsB modifyRegionBmodifyRegionCleverinclusiveRegionBblockifyRegion joinLinesB concatLinesB BoundarySide OutsideBound InsideBoundTextUnitGenUnitgenEnclosingUnitgenUnitBoundaryDocumentVLine Character outsideUnitunitWord unitDelimited isWordChar checkPeekB unitViWord unitViWORDunitViWordAnyBndunitViWORDAnyBndunitViWordOnLineunitViWORDOnLineisAnySepunitSepunitSepThisLine atBoundaryBunitEmacsParagraph unitParagraph unitSentenceleftBoundaryUnitgenAtBoundaryB numberOfBwhileBuntilB doUntilB_untilB_ doIfCharBgenMoveB genMaybeMoveBmoveB maybeMoveB transposeB transformBdeleteBregionWithTwoMovesB regionOfBregionOfNonEmptyB regionOfPartBregionOfPartNonEmptyBregionOfPartNonEmptyAtB readPrevUnitB readUnitBhalfUnit deleteUnitB RegionStyle Exclusive InclusiveLineWise regionStyleAconvertRegionToStyleBmkRegionOfStyleBunitWiseRegionextendRegionToBoundaries RelPositionWithinBelowAboveBufferFileInfobufInfoFileName bufInfoSize bufInfoLineNo bufInfoColNo bufInfoCharNobufInfoPercentbufInfoModified moveToSol moveToEoltopBbotB leftOnEol moveXorSol moveXorEol nextWordB prevWordBgotoCharacterBnextCIncnextCInLineIncnextCExcnextCInLineExcprevCIncprevCInLineIncprevCExcprevCInLineExcfirstNonSpaceB lastNonSpaceBmoveNonspaceOrSolisCurrentLineEmptyBisCurrentLineAllWhiteSpaceBnextNParagraphsprevNParagraphs goUnmatchedBatSolatEolatSofatEof atLastLine getLineAndColgetLineAndColOfPointreadLnB readCharB readRestOfLnBreadPreviousOfLnBhasWhiteSpaceBefore prevPointB nextPointBreadCurrentWordB readPrevWordBbdeleteB killWordB bkillWordBuppercaseWordBlowercaseWordBcapitaliseWordBswitchCaseCharBswitchCaseChar deleteToEoldeleteLineForwardswapBdeleteTrailingSpaceBsetSelectionMarkPointBgetSelectionMarkPointBexchangePointAndMarkB getBookmarkBbufInfoB upScreensB downScreensB upScreenB downScreenBscrollScreensB scrollByB vimScrollB vimScrollByBscrollToCursorBscrollCursorToTopBscrollCursorToBottomBscrollBsnapInsBindexOfSolAbovepointScreenRelPosition snapScreenB downFromTosB upFromBosBmiddleBpointInWindowBgetRawestSelectRegionBgetRawSelectRegionBgetSelectRegionBsetSelectRegionBextendSelectRegionBdeleteBlankLinesB lineStreamBgetMaybeNextLineB getNextLineBgetNextLineWhichBgetNextNonBlankLineBmodifySelectionBmodifyExtendedSelectionBlinePrefixSelectionBunLineCommentSelectionBjustifySelectionWithTopBreplaceBufferContent fillRegion fillParagraph sortLinesrevertBsmallBufferSizeshapeOfBlockRegionBleftEdgesOfRegionBrightEdgesOfRegionB'splitBlockRegionToContiguousSubRegionsBdeleteRegionWithStyleBreadRegionRopeWithStyleBinsertRopeWithStyleBflipRectangleBmovePercentageFileBfindMatchingPairBtabBindentSettingsB autoIndentBautoIndentHelperB cycleIndentsBfetchPreviousIndentsBautoIndentWithKeywordsBlastOpenBracketHint keywordHintskeywordAfterHints indentOfB spacingOfB indentToBindentAsPreviousB indentAsNextBindentAsNeighborLineBnewlineAndIndentB rePadString indentStringshiftIndentOfRegiondeleteIndentOfRegionindentOfCurrentPosBSubprocessInfoprocCmdprocArgs procHandlehInhOuthErrbufRefseparateStdErr SubprocessIdrunProgCommand shellFileNamerunShellCommandcreateSubprocess readAvailable StyledRegionnormalizeRegiontransformCharactersInRegionBtransformCharactersInLineNCountedTextObject TextObjectchangeTextObjectCountregionOfTextObjectBchangeTextObjectStylestringToTextObject QueuedUpdate qUpdatePointqInsertqDelete dollarifydollarifyWithinrunQ openParen closeParen isNormalParenisTuple queueDeletequeueReplaceWith stripComments dollarifyTop dollarifyExprisSimple isCollapsible selectedTreefindLargestWithinwithinsafeLast dollarifyPdollarifyWithinPisNormalParenPisTuplePstripCommentsP dollarifyTopPdollarifyExprP isSimplePisCollapsibleP selectedTreePfindLargestWithinPwithinP safeLastPindexedAnnotatedStreamB applyHeights spliceAnnots strokePicture paintStrokes paintPictureattributesPictureBattributesPictureAndSelB arrangeItems arrangeItems'Proto fromProto extractValueoverride.->Theme defaultTheme darkBlueThemeUIBoot startFrontEndconfigUI startActionsinitialActions defaultKmconfigInputPreprocess modeTable debugModeconfigRegionStyleconfigKillringAccumulate%configCheckExternalChangesObsessivelybufferUpdateHandlerlayoutManagers configVars CursorStyleFatWhenFocusedAndInsertingFatWhenFocusedNeverFat AlwaysFatUIConfigconfigVtyEscDelayconfigFontNameconfigFontSizeconfigScrollStyleconfigScrollWheelAmountconfigLeftSideScrollBarconfigAutoHideScrollBarconfigAutoHideTabBarconfigLineWrapconfigCursorStyleconfigWindowFill configTheme configStyleconfigFundamentalModeconfigTopLevelKeymapbufferUpdateHandlerA&configCheckExternalChangesObsessivelyAconfigInputPreprocessAconfigKillringAccumulateAconfigRegionStyleA configUIA configVarsA debugModeA defaultKmAinitialActionsAlayoutManagersA modeTableA startActionsAstartFrontEndAconfigAutoHideScrollBarAconfigAutoHideTabBarAconfigCursorStyleAconfigFontNameAconfigFontSizeAconfigLeftSideScrollBarAconfigLineWrapAconfigScrollStyleAconfigScrollWheelAmountA configThemeAconfigVtyEscDelayAconfigWindowFillA bufferStackbuffers refSupplytabs_dynamic statusLinesmaxStatusHeightkillring currentRegexsearchDirection pendingEventsonCloseActionsStatusesStatus liftEditor emptyEditor$fMonadEditorEditorM$fApplicativeEditorM$fBinaryEditorTempBufferNameHint tmp_name_basetmp_name_index bufferStackAbuffersA currentRegexAdynamicA killringAmaxStatusHeightAonCloseActionsApendingEventsA refSupplyAsearchDirectionA statusLinesAtabs_AwindowswindowsAtabsA currentTabAaskConfigVariableAdynAnewRef newBufRefstringToNewBuffer insertBuffer forceFold1 forceFoldTabs deleteBuffer bufferSetcommonNamePrefixgetBufferStack findBufferfindBufferWithfindBufferWithNamegetBufferWithNameopenAllBuffersE shiftBufferwithGivenBuffer0withGivenBufferAndWindow0 withBuffer0withEveryBufferEcurrentWindowA currentBufferprintMsg printMsgs printStatus setStatus clrStatus statusLinestatusLineInfo setTmpStatussetRegEgetRegE getDynamic setDynamicnextBufWprevBufW newBufferEnewTempBufferEalternateBufferEnewZeroSizeWindow newWindowEswitchToBufferEswitchToBufferOtherWindowEswitchToBufferWithNameE closeBufferEgetBufferWithNameOrCurrentcloseBufferAndWindowEnextWinEprevWinEswapWinWithFirstEpushWinToFirstE moveWinNextE moveWinPrevEfixCurrentBufferA_fixCurrentWindow withWindowEfindWindowWithwindowsOnBufferE focusWindowEsplitElayoutManagersNextElayoutManagersPreviousE withLMStacklayoutManagerNextVariantElayoutManagerPreviousVariantE enlargeWinE shrinkWinEsetDividerPosEnewTabEnextTabE previousTabEmoveTab deleteTabE tryCloseE closeOtherEshiftOtherWindowwithOtherWindowacceptedInputsonCloseBufferE$fShowTempBufferNameHint addJumpHereE addJumpAtE jumpBackE jumpForwardEmodifyJumpListE$fYiVariableTempBufferNameHint$fDefaultTempBufferNameHint$fBinaryTempBufferNameHintmainendsuspendrefreshuserForceRefreshlayout reloadProjectdummyUI mkIsPrefixOf prefixMatch infixMatchsubsequenceMatchcontainsMatch' containsMatchcontainsMatchCaseInsensitivecompleteInListcompleteInListCustomShowcompleteInList'History_historyCurrent_historyContents_historyPrefix Histories$fDefaultHistorydynKeyA miniBuffer historyUp historyDown historyStarthistoryStartGen historyFinishhistoryFinishGen historyFind historyMovehistoryMoveGenhistoryPrefixSethistoryPrefixSet'$fYiVariableMap$fBinaryHistory alignRegion alignRegionOn getRectangle multiSplit onRectangle openRectanglestringRectangle killRectangle yankRectangleTagTable tagFileName tagBaseDir tagFileMaptagTrieTag lookupTagimportTagTablehintTags completeTagsetTags resetTagsgetTagssetTagsFileListgetTagsFileList VimTagStack tagsStack getTagStack setTagStack listTagStack pushTagStack peekTagStack popTagStack TabBarDescrTabDescrtabText tabInFocus tabBarDescrtabAbbrevTitle topKeymapstartInsertKeymap insertKeymapstartTopKeymapYiAction makeActionYiVaryiEditorthreadsyiSubprocessIdSupplyyiSubprocessesyiUiinputoutputyiConfigyiVarBufferAEditorAYiAwithUIunsafeWithEditorwithGivenBuffer readEditor catchDynE catchJustE handleJustEshutdown insertKeymapAstartInsertKeymapAstartTopKeymapA topKeymapAmodelessKeymapSet withModeYreloadeditFile ArticleDBADBunADBArticlesplitgetLatestArticle removeSetLastshift insertArticlewriteDBreadDBoldDbNewArticlesetDisplayedArticle nextArticledeleteAndNextArticlesaveAndNextArticlesaveAsNewArticle$fYiVariableArticleDB$fDefaultArticleDB printableChartextCharpStringcharOfctrlmetasuperhypercharctrlChmetaChhyperChoptModspec>>!>>=!?>>?>>!?*>>?*>>!savePersistentStateloadPersistentState startEditor quitEditorfocusAllSyntax refreshEditor suspendEditorrunProcessWithInput runAction msgEditor errorEditor closeWindowstartSubprocess sendToProcess withSyntax SearchResult SearchWrappedPatternNotFound PatternFound SearchMatch setRegexE resetRegexE getRegexEdoSearch searchInitcontinueSearchsearchReplaceRegionBsearchReplaceSelectionB replaceStringsearchAndRepRegion0searchAndRepRegionsearchAndRepUnit isearchInitEisearchIsEmpty isearchAddEmakeSimpleSearch isearchDelEisearchHistory isearchPrevE isearchNextE isearchWordEisearchFinishEisearchCancelEisearchFinishWithEisearchCancelWithEqrNext qrReplaceAllqrFinish qrReplaceOne doVimSearchcontinueVimSearch caseSensitizegv hoogleRawhoogleFunctionshoogleFunModulehoogle hoogleSearchCompletionScopeFromAllBuffersFromCurrentBuffer resetCompletemkWordCompletewordCompleteString'wordCompleteString wordComplete' wordComplete completeWordB listBuffers killRegion killLineE killringPutkillRestOfLineyankE killRingSaveEyankPopEappendNextKillEstandardMovementBindingsVimStatevsModevsCount vsAccumulatorvsTextObjectAccumulator vsRegisterMapvsActiveRegistervsRepeatableActionvsStringToEval vsStickyEolvsOngoingInsertEventsvsLastGotoCharCommandvsBindingAccumulatorvsSecondaryCursorsvsPasteGotoCharCommandVimModeSearch previousMode directionExVisual InsertVisual InsertNormalReplaceSingleCharReplaceNormalOperatorPendingNormalRegisterregRegionStyle regContentRepeatableActionraPreviousCountraActionString RegisterName OperatorName EventString VimBinding VimBindingE VimBindingY RepeatTokenContinueDropFinish stringToEvent eventToString parseEventsstringToRepeatableActionsplitCountedCommandnormalizeCount switchMode switchModeE modifyStateE resetCount resetCountEgetMaybeCountE getCountE setCountEaccumulateBindingEventEaccumulateEventEaccumulateTextObjectEventE%flushAccumulatorIntoRepeatableActionEdropAccumulatorEdropBindingAccumulatorEdropTextObjectAccumulatorE getRegisterE setRegisterEnormalizeCountE maybeMult setStickyEolEupdateModeIndicatorEsaveInsertEventStringEscheduleActionStringForEval CountedMoveMove moveStyle moveIsJump moveAction stringToMovechangeMoveStyle regionOfMoveBmkStringBindingEmkStringBindingY mkBindingE mkBindingYselectPureBinding selectBinding matchFromBooladdVimJumpHereEmkMotionBindingmkChooseRegisterBindingindentBlockRegionBpasteInclusiveBaddNewLineIfNecessary defInsertMap defReplaceMapdefReplaceSingleMapdefSearchMotionMap LineRangeCurrentLineRange FullRange MarkRange ExCommand cmdComplete cmdIsPure cmdActioncmdAcceptsRangecmdShowstringToExCommand$fShowExCommandexEvalEexEvalYCommandArgumentsFilePatternTagRegexTagToKill LineNumber:::DocfromDocspawnMinibufferEwithMinibuffer mkCompleteFnsimpleCompleteinfixComplete' infixCompletenoHintnoPossibilitieswithMinibufferGenwithMinibufferFin anyModeNameanyModeByNameM anyModeByNamegetAllModeNamesmatchingBufferNamesgetAppropriateFiles getFoldermatchingFileNamesadjBlock adjIndent promptFile matchFile completeFile findFileHintonCharLetterCode rot13CharprintFileInfoEdireddiredDirdiredDirBufferrevertEviWrite viWriteTo viSafeWriteTofwriteE fwriteBufferE fwriteToE fwriteAllEbackupE setFileName VimOperator operatorNameoperatorApplyToRegionE defOperatorsstringToOperatoroperatorApplyToTextObjectEopYankopDeleteopChangeopFormatmkCharTransformOperatorlastCharForOperatordefNormalOperatorPendingMap OptionActionAskInvertSet parseWithBang parseRange parseOptionfilenameComplete forAllBuffers pureExCommandimpureExCommand errorNoWriteTokenBasedModefundamentalModelinearSyntaxMode removeAnnotscModeobjectiveCModecppMode cabalModesrmcMode gitCommitMode svnCommitMode ocamlModeperlModerubyMode pythonModejavaModejsonMode gnuMakeModeottModewhitespaceMode anyExtensionextensionOrContentsMatch hookModesapplyModeHooks lookupModeabstract ireaderMode ireadModemode interactIdinteractHistoryMoveinteractHistoryFinishinteractHistoryStartgetInputRegiongetInputsetInput spawnProcessspawnProcessMode feedCommand queryReply CabalBuffer cabalBufferchangeBufferNameE shellCommandE shellCommandVcabalConfigureE configureExitreloadProjectEbuildRun makeBuildcabalRun cabalBuildEshell searchSourcesgrepFind$fYiVariableCabalBufferhomeKeyhaskellAbstract cleverModefastMode literateMode preciseModeghciGetghciSendghciLoadBuffer ghciInferTypejavaScriptModehooks latexMode2 latexMode3 defNormalMap defVisualMapstartFieldConfigM runConfigMcustomVariablemaxHistoryEntriesHookTyperunHook EvaluatorexecEditorActionImplgetAllNamesInScopeImplexecEditorActiongetAllNamesInScope evaluator ghciEvaluatorpublishedActions publishActionpublishedActionsEvaluatorjumpToE jumpToErrorE consoleKeymap UnivArgument askQuitEditor askSaveEditormodifiedQuitEditor isearchKeymap queryReplaceEexecuteExtendedCommandE evalRegionE insertNextCargToIntreadUniversalArgfindFilefindFileNewTab scrollDownE scrollUpE switchBufferE killBufferE justOneSep joinLinesE promptTagcustomizedCuaKeymapSetkeymapportableKeymapcutdelcopypastedefExCommandParsersdefExMapModeMap_eKeymap_completionCaseSensitivecompletionCaseSensitiveeKeymapmkKeymap defKeymapVimExCmdcmdNamescmdFn completeFnVimOptstildeopcompleteCaseSensitiveenableTagStack v_top_level v_ins_charv_opts v_ex_cmds savingInsertBsavingInsertCharBsavingInsertStringB savingDeleteBsavingDeleteCharBsavingDeleteWordBsavingCommandYsavingCommandE keymapSetnilCmdexCmdexCmdsexSimpleCompleteexInfixComplete'exInfixCompletemkExHistCompleteexHistComplete'exHistCompleteexHistInfixComplete'exHistInfixCompleteexModeexEvalleave leaveInsRepbeginIns beginInsB beginInsE abellaModeVimabellaModeEmacs abellaEvalabellaEvalFromProofPoint abellaUndoabella abellaGet abellaSendMarkInfoDependentMarkInfoValuedMarkInfoendMarkSimpleMarkInfo userIndex startMark SnippetMark DependentMark ValuedMark SimpleMark SnippetCmd SupertabExtSupertab MkSnippetCmd mkSnippetCmdDependentMarksmarks BufferMarks bufferMarkscursor cursorWithdepisDependentMark bufferMarkersmkMarktext&&> runSnippetupdateUpdatedMarksfindEditedMarksdependentSiblingsupdateDependentsupdateDependents'markText setMarkTextwithSimpleRegion markRegionsafeMarkRegion adjMarkRegionfindOverlappingMarksWithfindOverlappingMarksregionsOverlappingMarksoverlappingMarksallOverlappingMarksdependentOverlappingMarksnextBufferMarkisDependentMarkersafeDeleteMarkBmoveToNextBufferMarksuperTab fromSnippetssnippet$fMonoidSupertabExt$fMkSnippetCmdSnippetMark()$fMkSnippetCmdRWSTa$fMkSnippetCmd[]() $fOrdMarkInfo$fYiVariableDependentMarks$fYiVariableBufferMarks$fDefaultDependentMarks$fDefaultBufferMarks$fBinaryMarkInfo hsFunctionhsClass VimConfig vimKeymap vimBindings vimOperatorsvimExCommandParsers vimDigraphs mkKeymapSet defVimConfigpureEval impureEvalavailableFrontends defaultConfigdefaultEmacsConfigdefaultVimConfigdefaultCuaConfigtoEmacsStyleConfigtoVimStyleConfigtoVim2StyleConfigtoCuaStyleConfig ConsoleConfig ghcOptions selfCheck userConfigDirdo_argsyiyiDriverSide RightSideLeftSide configMainsetFrontendPreferences setFrontendglobalBindKeys modeBindKeysmodeBindKeysByNameaddModemodifyModeByNamefontNamefontSizescrollWheelAmount scrollStyle cursorStyle scrollBarSideautoHideScrollBarautoHideTabBarlineWrap windowFillthemedebug runOnStartuprunAfterStartupinputPreprocessmodes regionStylekillringAccumulate ModuleKind HiddenModule ExposedModule FolderKind PlainFolderHsSourceFolderFileKind LicenseText SetupScriptTextFileHSourceCSourceHsSource ProjectItem ModuleItem modItemName moduleKind PackageItem pkgItemNameFileItem fileItemName itemFPathfileKind FolderItemfolderItemName folderKindDependenciesItem depItemName projItemName itemVersionitemName greekData zipscriptsemptyinsertfromListtoList lookupPrefix forcedNextpossibleSuffixes certainSuffixTrie liftMaybe $fBinaryTrieshow' compareBy mergeTrees'$fShowCompletionTreeStepsbetterevalR'iBestfeedpushSymspushEof mkProcessrunProcessZipRPolishRStopRAppRPushLogEntryLSLSuspLFailLDoneLShiftLDislikeLEmptyLLogProfile:>PResPFailPSuspFailLogDislikeBestSusSh'ShiftDoneAppValDisjEmptShifBindApplPure:<top_restfirstsecond***mapSuccdislikeThreshold+>rightLogprofile countWidthapplytoQtoPfeedZevalLevalL'evalRPsimplifyevalRfullLogonRight $fShowZip $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParser $fShowRPolish $fShowSteps dbgHandlelogStreamThreadprocessGetContents recurseDirsafeHeadsplitBy splitElemunSplitrevDropequating dropPrefix dropSuffix netEncode netDecode getNetstring skipWhite readCharN hexEncode hexDecodelogfile logAction setLogAction setLogfile getLogfilelogSunlessMshortenuncurry3-? DelayListdecreaseignoringExceptionprintingException orException normalisePathcanonicalizePath expandSym makeAbsolute combinePath splitPath replaceUpToreplaceShorthandsuserToCanonPath expandTilda isAbsolute'guessCabalStanzafindPackageDescguessCabalFilecatchIOversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName remapChar ctrlLowcasesetMetametaBit $fShowEvent $fOrdEvent HPairNStack SlidyWide SlidyTallWideTallbaseGHC.Baseid$fDefaultAnyLayoutManager$fDefaultLayout VPairNStack splitList handleStack$fLayoutManagerTransposed$fTransposableLayout$fTransposableOrientation$fLayoutManagerVPairNStack$fLayoutManagerHPairNStack$fLayoutManagerSlidyWide$fLayoutManagerSlidyTall$fLayoutManagerWide$fLayoutManagerTall$fLayoutManagerAnyLayoutManager$fEqAnyLayoutManager $fShowLayoutmodify $fRefMVar $fRefIORef Data.Listunlineslinescontainers-0.5.5.1 Data.Map.Basedata-default-class-0.0.1Data.Default.ClassdefDynamictoDyn fromDynamic toSerialRep fromSerialRepDV DynamicHelperSerialDCV$fDefaultDynamicValues$fBinaryDynamicValues$fBinaryDynamic$fDefaultConfigVariables pushEvent findWritesPriorWriteGetPlusPriorityWritesFailsGetsBindsReturns pullWrites$fShowP$fMonoidInteractState$fMonadInteractIwevent $fMonadPlusI$fMonadI$fAlternativeI$fApplicativeI $fFunctorI$fMonadInteractStateTweappUserDataCondfingertree-0.1.0.0Data.FingerTree FingerTreefoldrlength countNewLinesappendsplitAtsplitAtChunkBefore splitAtLine splitAtLine'RopefromRopeIndices charIndex lineIndexChunk chunkSize fromChunkdefaultChunkSizemkChunk-||-newlinetoLazyByteStringreversetoReverseStringtoStringfromLazyByteStringnullconcattakedrop cutExcess writeFilereadFile $fBinaryRope$fMeasuredSizeChunk $fMonoidSize Data.Maybemaybe Data.Eithereither ordRegion $fShowRegion$fBinaryRegionpush krAccumulate krLastYankmaxDepth$fBinaryKillringmodifyJumpList $fShowJump $fBinaryJump tabWindowstabLayoutManager$fEqTab relayoutIfrelayout buildLayout $fShowTab $fBinaryTabliteralPatternreversePattern searchOptmapLeftliteralPattern'$fUniplatePattern$fBinarySearchExp$fBinarySearchOptionregex-base-0.93.2Text.Regex.BasegetVersion_Text_Regex_BaseText.Regex.Base.RegexLike MatchOffset MatchLength MatchArray MatchTextmrSubs mrSubListmrAftermrMatchmrBeforeMR getExecOpts setExecOptsdefaultExecOptdefaultCompOpt blankExecOpt blankCompOpt RegexOptionsmakeRegexOptsM makeRegexM makeRegexOpts makeRegex RegexMaker matchOnceText matchAllText matchTest matchCountmatchAll matchOnce RegexLikematchMmatch RegexContextextractafterbeforeExtractgetAllSubmatches AllSubmatchesgetAllTextSubmatchesAllTextSubmatches getAllMatches AllMatchesgetAllTextMatchesAllTextMatchesregex-tdfa-1.2.0Text.Regex.TDFA=~~=~getVersion_Text_Regex_TDFAText.Regex.TDFA.CommonlastStarGreedy newSyntax rightAssoc multiline caseSensitive CompOption captureGroups ExecOptionRegex$fFunctorScannermemhlCacheoverlays dirtyOffsetnewBI readChunk insertChars deleteCharsshiftMarkValuesizeBInelemsBI overlayUpdate addOverlayBI delOverlayBIstrokesRangesBI isValidUpdate applyUpdateIreverseUpdateIlineAtsolPoint solPoint' regexRegionBI modifyMarkBIgetMarkDefaultPosBI BufferImpl FBufferData markNames overlayLayer _overlayBegin _overlayEnd _overlayStyleHLStateMarks dummyHlState$fBinaryBufferImpl $fOrdOverlay $fEqOverlay$fBinaryMarkValue updateString updateSize$fBinaryUpdate mapOvlMarks getStreamgetIndexedStreamdelOverlayLayercharsFromSolBI newMarkBIgetMarkValueBIdeleteMarkValueBI getMarkBI setSyntaxBI touchSyntax updateSyntaxgetAstfocusAst$fBinaryUIUpdateundoInteractiveremIPaddIPundoUntilInteractiveasRedoSavedFilePoint$fBinaryChange$fBinaryURList IndexedStrmoveCh $fShowPosn $fOrdPosn $fShowTokAlexAcc AlexAccSkip AlexAccNone AlexLastAcc AlexLastSkipAlexNone AlexReturn AlexTokenAlexSkip AlexErrorAlexEOFAlexAddrAlexA# alex_base alex_table alex_check alex_deflt alex_accept stateToInit alexScan' alexScanUser'alex_scan_tkn'cmmscs alex_action_0 alex_action_1alexIndexInt16OffAddralexIndexInt32OffAddr quickIndexalexScan alexScanUser alex_scan_tkniUnbox$fFunctorAlexLastAccpruneNodesBefore firstThatlastThatfromLeafAfterToFinalallLeavesRelative'nodesAndChildIndex allLeavesIn getAllPathsNTTTNTestEmptyNodeallLeavesRelative nodesOnPath beforeChild afterChildallLeavesRelativeChildgoDownindexwalkDownwkDown nullSubtree getFirstTok getLastTok nodeRegiontAtarbitraryFromList arbitraryPath regionInside pointInsideprop_fromLeafAfterToFinalprop_allLeavesAfterprop_allLeavesBeforeprop_fromNodeToLeafAfterprop_fromNodeToFinal$fArbitraryNTTT$fArbitraryRegion$fEqTok$fArbitraryTest $fIsTreeTest MaybeOneMoreOneMoreNone manyToks'subTree$fArbitraryPointIState BlockOpenIndentisParenmaxPosn alex_action_2 alex_action_3 alex_action_4 alex_action_5 alex_action_6 alex_action_7 alex_action_8 alex_action_9alex_action_10alex_action_11alex_action_12alex_action_13alex_action_14alex_action_15alex_action_16 AlexAccPredAlexAccSkipPred alexAndPredalexPrevCharIsalexPrevCharMatchesalexPrevCharIsOneOfalexRightContextnestcommalex_action_17alex_action_18alex_action_19alex_action_20alex_action_21alex_action_22alex_action_23alex_action_24alex_action_25alex_action_26alex_action_27alex_action_28alex_action_29alex_action_30alex_action_31alex_action_32alex_action_33alex_action_34alex_action_35alex_action_36alex_action_37alex_action_38alex_action_39alex_action_40alex_action_41alex_action_42alex_action_43alex_action_44alex_action_45alex_action_46alex_action_47alex_action_48alex_action_49alex_action_50alex_action_51alex_action_52pModulepModBodypEmptyBLpBodypVarIdpQvaridpQvarsym 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 $fIsTreeExpGHC.ListelemopToOpresToResStartbuiltinConstructorshtmlcomm multicomm LaTeXBlock CommentBlock unCommentCodeLine CodeBlock codeBlockcodeLinealex_action_53alex_action_54alex_action_55alex_action_56alex_action_57alex_action_58alex_action_59alex_action_60alex_action_61alex_action_62alex_action_63alex_action_64alex_action_65alex_action_66alex_action_67alex_action_68alex_action_69alex_action_70alex_action_71alex_action_72alex_action_73alex_action_74alex_action_75alex_action_76alex_action_77alex_action_78alex_action_79alex_action_80alex_action_81DiffDeclaration LineComment MessageLineKeyword SecondLineDigestdiffkeyword lineComment secondLine RuleCommandComplexExpansionIncludeDirective InCommentTopLevelcomplexExpansionincludeDirective ruleCommandbeginHombindspechomsplice HlInVariableHlInSubstRegex HlInPerldoc HlInHeredocHlInInterpHeredocNoIdentHlInInterpHeredocHlCollectHeredocIdentHlStartCollectHeredocIdent HlInStringHlInInterpStringHlInCodefromQuoteStateincreaseVarCastDepthdecreaseVarCastDepthexitVarIfZeroDepthcollectHeredocIdentheredoc interpHeredocinterpHeredocNoIdent interpStringperldocstartCollectHeredocIdentstringvariableHlCommitSummaryHlCommitMessage commitSummary spaceStyletabStyle getStrokeMod getStrokeImpgetStrtspStyle paintAtomisErrisErrNerrStylecomtk'tkTConsttkDConsttkImport dropWhilebkey__undos bufferDynamic preferColpendingUpdates lastSyncTimereadOnly insertingconst2identselectionStyleprocesswinMarkslastActiveWindowpointFollowsWindowupdateTransactionInFlightupdateTransactionAccumSelectionStylehighlightSelectionrectangleSelection$fBinaryMarkSetrawbuf attributesbkey__AAbufferDynamicAAidentAA insertingAAlastActiveWindowAAlastSyncTimeAApendingUpdatesAApointFollowsWindowAA preferColAA processAA readOnlyAAselectionStyleAAundosAAupdateTransactionAccumAAupdateTransactionInFlightAA winMarksAA modifyRawbufqueryAndModifyRawbufattrsAupdateTransactionInFlightAupdateTransactionAccumA preferColAbufferDynamicAselectionStyleA winMarksAdefaultModeLine padString queryBuffer modifyBufferqueryAndModifyundoRedopromptCommentStringepochcheckRO applyUpdate modifyMode0 withSyntax0 getInsMarkreplaceCharWithVerticalOffsetmaybeCharBelowBmaybeCharAboveBmaybeCharWithVerticalOffsetcolMove $fShowFBuffer $fEqFBuffer$fApplicativeBufferM $fBinaryMode$fBinarySelectionStyle$fBinaryFBuffer$fBinaryUTCTime$fBinaryAttributes replToMod skippingFirst skippingLast skippingNull genBoundaryisEndOfSentencechecks GHC.TypesFalse atBoundarydoUntilBisNlatViWordBoundaryatAnyViWordBoundaryatViWordBoundaryOnLineviWordCharTypeviWORDCharType atSepBoundary enclosingUnit$fYiVariableRegionStyle$fDefaultRegionStyle$fBinaryRegionStyleshellCommandSwitch read_chunktextObjectRegionB'parseTextObjecttoOuterTrue bestMatch filterMatches isSingleton readCTags TagsFileListTags$fDefaultTagsFileList $fDefaultTags$fYiVariableTagsFileList$fYiVariableTags $fBinaryTags$fYiVariableVimTagStack$fDefaultVimTagStack $fPEqEvent$fYiActionAction()$fYiActionBufferMx$fYiActionEditorMx$fYiActionYiMx $fYiActionIOx$fMonadEditorYiM$fMonadStateEditorYiM $fShowAction $fPEqAction interactive showErrorsdispatchcheckFileChangesclearAllSyntaxAndHideSelection msgEditor'terminateSubprocesses recoverMode postActionsshowEvspureMonYiVarstartSubprocessWatchersremoveSubprocessappendToBuffer pipeToBuffer waitForExitisearchEndWith isearchEndIsearch makeISearch isearchFunE isearchNext0 isearchNextiSearchqrReplaceCurrent$fYiVariableIsearch$fDefaultIsearch regionFirst' CompletionveryQuickCompleteWordwordsAndCurrentWordwordsForCompletionInBufferwordsForCompletionwords' charClass$fYiVariableCompletion$fDefaultCompletionswitch bufferKeymap$fBinaryRepeatableAction$fBinaryRegister$fDefaultVimMode$fBinaryGotoCharCommand$fDefaultVimState$fBinaryVimMode$fYiVariableVimState$fBinaryVimStatespecMap invSpecMapspecListstringToEvent' lookupMovelinewiseMotionsexclusiveMotionsinclusiveMotionsrepeatregionOfMoveB' moveForwardB moveBackwardB gotoXOrEOFwithDefaultCountmatchGotoMarkMovematchGotoCharMove $fFunctor(,,) combineActionsetUnjumpMarks addVimJumpAtEspecials exitBinding rawPrintablereplayoneshotNormalBindingpasteRegisterBindingdigraphBinding printableprintableActioncompletionBinding cursorBindingexitReplaceModeinsertOrReplaceBinsertOrReplaceCharWithBelowBinsertOrReplaceCharWithAboveB escBindingactualReplaceBinding enterBinding editBinding evalHelper typeGetPromptDocType PromptablegetPromptedValue getPrompt getMinibuffercompletionFunctiondoPromptgetPromptedValueListgetMinibufferListenumAll textUnits$fPromptableCommandArguments$fDocTypeFilePatternTag$fDocTypeRegexTag$fDocTypeToKill$fDocTypeLineNumber$fPromptable::: $fShow:::$fYiAction(->)x$fPromptableBufferRef$fPromptableAnyMode$fPromptablePoint$fPromptableTextUnit$fPromptableDirection$fPromptableInt$fPromptableChar$fPromptable[] diredPath diredMarks diredEntriesdiredFilePoints diredNameCol diredCurrFile diredOpSucCnt diredOpForAllDiredOpDONoOp DOFeedbackDOChoiceDOInput DOCkOverwriteDOCheck DOConfirmDORemoveBuffer procDiredOp askDelFiles diredRefreshinsertDiredLinelinesToDisplay diredScanDir scanForUid scanForGidaskRenameFiles askCopyFiles fileFromPoint DiredState DiredEntry DiredNoInfoDiredNamedPipeDiredCharacterDeviceDiredBlockDevice DiredSocket DiredSymLinkDiredDir DiredFile DiredFileInfo permStringnumLinksownergrp sizeInBytesmodificationTimeString$fYiVariableDiredState$fDefaultDiredState$fBinaryDiredState DiredOpStateDORename DOCopyDir DOCopyFile DORemoveDir DORemoveFile DRStringsDRFilesDRDatesDRSizesDRGroupsDROwnersDRLinksDRPermsundrsbypassReadOnly filenameColOfresetDiredOpStateincDiredOpSucCntgetDiredOpStatemodDiredOpState diredDoDeldiredDoMarkedDel diredKeymap modeStringshortCalendarTimeToString diredMark diredMarkDeldiredMarkWithChardiredRefreshMark diredUnmarkdiredUnmarkPathdiredUnmarkAll currentDir diredRename diredCopy diredLoadnoFileAtThisLine markedFiles diredUpDirdiredCreateDir$fDefaultDiredOpState$fBinaryDiredEntry$fYiVariableDiredOpState$fBinaryDiredOpState formatRegionBmkShiftOperator JustOperatorOperandParseResult NoOperandPartialOperandJustMoveJustTextObject textObjectregionForOperatorLineB parseOperand parseCommandsplitCountModifierCommand parseBang removePwd nameParserswitchToBuffer switchByName switchByRef printBufferseditshowEditnohlactionmodPastequitquitAllEsaveAndQuitAllE needsAWindowB substituteglobal allowedCmdswriteCmd writeAsCmdextensionMatchesStyleBasedMode isMakefile insideGroupghci GhciBuffer _ghciBuffer haskellLexerliterateHaskellLexer adjustBlockcleverAutoIndentHaskellBcleverAutoIndentHaskellCcolOf'tokCol nominalIndenttokText isLineComment contiguouscoalescecleverPrettifytokTypghciInferTypeOf$fYiVariableGhciBuffer jsCompile getJSBuffer mkJSBufferjsErrorsJSBufferjavaScriptAbstractjsSimpleIndentjsLexer$fYiVariableJSBuffer latexLexermkDigitBinding motionBindingchooseRegisterBinding zeroBinding repeatBinding jumpBindingsfinishingBingings pasteBefore pasteAfteroperatorBindingscontinuingBindingsnonrepeatableBindingssetMarkBinding searchWordE searchBindingcontinueSearchingrepeatGotoCharE enableVisualEcutCharEtabTraversalBinding withCountwithCountOnBuffer0 escAction exBinding digitBindingschangeVisualStyleBindingregionOfSelectionB shiftDBindingmkOperatorBindingreplaceBindingswitchEdgeBinding insertBindingvtyscrsizeuiEditoruiDirtypicture renderTabBar hasTabBarwindowLinesDisp renderWindow drawWindowdrawTextcomputeHeights colorToAttr paintCharsuiThreaduiEndInputLoopuiEndRenderLoopconfigoAttrsRenderedmkUI fromVtyEvent fromVtyKey fromVtyMod layoutActionrequestRefreshscanrT getRegionImplwithAttributesgetYattributesToAttrstysString trimHistories trimTagStackreadPersistentStatePersistentState histories vimTagStack aKillring aCurrentRegexMaxHistoryEntriesunMaxHistoryEntries#$fYiConfigVariableMaxHistoryEntries$fDefaultMaxHistoryEntries$fBinaryPersistentStateunMaxHistoryEntriesA runHookImpl$fHookType(->) $fHookTypeYiM$fHookTypeEditorMPublishedActionspublishedActions_ NamesCache$fDefaultPublishedActions$fYiVariableNamesCache$fDefaultNamesCache$fYiConfigVariableEvaluator$fDefaultEvaluatorpublishedActions_A errorRegexparseErrorMessageparseErrorMessageBprompt takeCommand"$fYiConfigVariablePublishedActions isFileBuffer maybeListgotoTag visitTagTablegetModifiedBuffers deservesSaveaskIndividualSaveselfSearchKeymap searchKeymapdigitttselfInsertKeymapsetMark unsetMark replaceSel deleteSelmoveKeysmoveselectrectotherdropToLastWordOfexitExfinishBindingYfinishBindingE finishPrereq finishAction failBindingEhistoryBinding editActionmoveE completionKm placeMark selectAlldeleteB' emacsKeys viActFirst viActBefore viBeginPosviEndPos viActAfterviWriteModifiedviSearchviSubins_modekwd_mode MViInsertionMVIunMVI ViInsertionViInsViCmdNoOpArbCmdViMoveNoMoveSeqMove ReplicateArbMovePercentageFileCharMoveGenMove MaybeMove$fYiVariableMViInsertion$fBinaryMViInsertion$fYiVariableViCmd$fDefaultViCmd $fBinaryViCmd viActAfterA viActBeforeA viActFirstA viBeginPosA viEndPosA SearchVariety UnboundedBounded VimExCmdMapunMVI_AcompleteCaseSensitiveAenableTagStackAtildeopA v_ex_cmdsA v_ins_charAv_optsA v_top_levelAlastViCommandAcurrentViInsertionA applyViCmdregionOfViMove applyOperator emptyViInsgetViIns viInsTextviCommandOfViInsertioncommitLastInsertionEsavingCommandE'YsavingCommandEYsavingCommandBsavingCommandB'savingCommandB'YviMoveviReplicateMove ignoreExCmdexFileNameComplete findUserCmd viCharInfo viChar8InfoviFnewE withBuffer0' withBuffer' withEditor' percentMove jumpToMark setMarkHere getViMarkB mayGetViMarkBvalidMarkIdentifierviTagStackPushPos AbellaBuffer _abellaBuffer abellaModeGengetProofPointMarkgetTheoremPointMark abellaNext abellaAbort$fYiVariableAbellaBuffer defVimKeymap handleEventpureHandleEventperformEvalIfNecessaryallPureBindingsdefaultPublishedActions escToMetaopenScratchBuffer nilKeymapOptseditorsusageversinfo getConfig OpenInTabsDebug GhcOption SelfCheck ConfigFileFrontendFileEditorNmLineNoVersionHelp frontendNamesdefaultConsoleConfigoptionsopenInTabsShortopenInTabsLong $fErrorErrrealMainshowErrorsInConfJustNothingrunManyOnStartuprunManyAfterStartupwarnisModeRegisteredensureModeRegistered