s/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef g h i j k l m n o p!q!r!s!t!u!v!w!x!y!z!{!|!}!~!!!""""""""""""""""""""""""""""""""""""""""""""""""###############################################################$$$$$%%%%%%%%%%%%%%                              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~         &'()))))))))))))))))))********************++++++++++++++,,,,,,,-.........///////0000000 1 1 2 2 2222222222222222223 3!3"3#3$3%3&3'3(3)3*3+3,3-3.3/303132333435363738393:3;3<3=4>4?4@4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V5W5X5Y5Z5[5\5]5^5_6`6a6b(c(d(e(f(g(h(i(j(k(l7m7n7o7p7q7r7s7t7u7v7w7x7y7z8{8|8}8~888888888888888888888888888888999::::::::::::::::::::::::::::;;<<<<<==>>??@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAA A A A A AAAAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:A;A<A=A>A?A@AAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWBXBYCZC[C\C]C^C_C`CaCbCcCdCeDfDgDhEiEjFkFlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|H}H~IIJJKKLLMMNNOOOOOOOOOPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRSSSSSTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUVWWWWWWWWWWWWWXXXXXXXXXXXXXXXXYYYY Y Y Y Y YYYYYYYYYYYYYYYYYYY Y!Y"Y#Y$Y%Y&Y'Y(Y)Y*Y+Y,Y-Y.Y/Y0Y1Y2Y3Y4Y5Y6Z7Z8Z9Z:Z;Z<Z=Z>Z?Z@ZAZBZCZDZEZFZGZHZIZJ[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_{_|_}_~__________________________________________________________________________```````````````````aabbbbbbbbbbbbbbbbbbcccddddddddddddddddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*e+e,f-f.g/g0g1g2g3g4g5g6g7g8g9g:g;g<g=g>g?g@gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg[g\g]g^g_g`gagbgcgdgegfggghgigjgkglgmgngohphqirisitiuiviwixiyizi{i|i}i~iiiiiiijjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklmmmmmmmmnnnnnnnn''oooooooooooooooooooooooooooooooooooooo|p Safe-Infered                               Safe-InferedcdefghcdefghcdghefcdefghqNone  A blank Trie #Insert a new string into the trie. 2Take a list of String and compress it into a Trie >Take a trie and expand it into the strings that it represents 8Takes a trie and a prefix and returns the sub-trie that  of words with that prefix DFinds the longest certain path down the trie starting at a the root 3 Invariant Assumption: All paths have at least one true node below them :Helper function, finds all the suffixes of a given prefix WHelper function, finds the longest certain path down the trie starting at a given word                          rNone                   Safe-Inferedijklmno ijklmnoijlmnkoijklmno  Safe-Inferedt'Combination of the Control.Monad.State   and _ |ORerun the monad until the boolean result is false, collecting list of results. pqrstuvwxyz{|}  _pqrstuvwxyz{|}pqrs_}t{uxv|zyw pqrstuvwxyz{|}   Safe-InferedParser specification Push some symbols.  Push eof Make a parser into a process. BRun a process (in case you do not need the incremental interface) ?Parse the same thing as the argument, but will be used only as ? backup. ie, it will be used only if disjuncted with a failing  parser. %~ ! " # $ % & '~~~ ! " # $ % & ' Safe-InferedFSet the file to which debugging output should be written. Though this  is called initDebug. D Debugging output is not created by default (i.e., if this function  is never called.) = The target file can not be changed, nor debugging disabled. ?Outputs the given string before returning the second argument. Traces x and returns y. Like traceM, but returns (). s Safe-Infered ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @t Safe-Infered A B C A B C A B Cu Safe-Infered DSExecute IO (Maybe a) action replacing all exceptions with return value of Nothing. E=Execute IO () action, replacing all exceptions with messages F=Execute IO () action, replacing all exceptions with messages  D E F D E F D E Fv Safe-Infered GRemoves /./ // and /../ sequences from path,  doesn't follow symlinks H.Returns absolute name of the file, which doesn' t contain  any /./, /../, // sequences or symlinks  G H I G H I G H Iw Safe-Infered J"Canonicalize a user-friendly path KXTurn a user-friendly path into a computer-friendly path by expanding the leading tilda. L"Is a user-friendly path absolute?  J K L J K L J K Lx Safe-Infered MGuess what lib/exe the sourcefile belongs to. NCFind a package description file in the given directory. Looks for  .cabal files.  O M NWhere to look  pkgname.cabal  O M N O M Ny Safe-Infered P Q R S T U P Q R S T U P Q R S T U Safe-Infered Safe-Infered%Remove any trailing strings matching irs (input record separator)  from input string. Like perl' s chomp(1). Trim spaces at beginning and end  Inverse of . In contrast to 1 , this does # not add an empty line at the end.  Split a String in lines. Unlike  V, this does not # remove any empty line at the end. 6A helper function for creating functions suitable for  modifySelectionB and  modifyRegionB. 8 To be used when the desired function should map across  the lines of a region.  Safe-InferedTGet the length of the string. (This information cached, so O(1) amortized runtime.) cCount the number of newlines in the strings. (This information cached, so O(1) amortized runtime.) 4Append two strings by merging the two finger trees. ,Split the string at the specified position. /Split 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.  W X Y W X Y  Safe-Infered<A prototype. Typically the parameter will be a record type. ; Fields can be defined in terms of others fields, with the 7 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, N f2 = f1 self + 1, -- 'f1 self' refers to the overriden definition of f1.  f3 = f1 self + 2  } Get 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 access  Safe-Infered QThe default value. If a function tries to get a copy of the state, but the state  hasn't yet been created, 2 will be called to supply *some* value. The value 8 of initial will probably be something like Nothing, [], "", or z{ - compare  the mempty of  Data.Monoid. As |}", but with O(n*log(n)) behaviour. ?As Map.adjust, but the combining function is applied strictly. EAs Map.alter, but the newly inserted element is forced with the map. Generalisation of  Z to arbitrary foldables. Alternative to groupBy.  9 groupBy' (\a b -> abs (a - b) <= 1) [1,2,3] = [[1,2,3]] whereas  : groupBy (\a b -> abs (a - b) <= 1) [1,2,3] = [[1,2],[3]] 5TODO: Check in ghc 6.12 release if groupBy == groupBy'. DLift an accessor to a traversable structure. (This can be seen as a  generalization of fmap) 4Return the longest common prefix of a set of lists. 1 P(xs) === all (isPrefixOf (commonPrefix xs)) xs E length s > length (commonPrefix xs) --> not (all (isPrefixOf s) xs) WFinds 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 .  [ \  ] ^  !" _# ` a b c$% d e f g h&'() i j*+, k l m n o p q r s t u v w x y z { | } ~  -./0123456789:;<=>?@ABC DEFGHI JKLMNOPQRSTUV WXY Z[\]^ _`abpqrstuvwxyz{|}C-%^$(*+ W;:'&987654EDIHGF R,QVUTSXZ [Y\] 32!"@?>=<`ab)#PMNJL/K0OA1B. [ \  Safe-InferedSMap an Event to a Char. This is used in the emacs keymap for Ctrl-Q and vim keymap insertSpecialChar !   Safe-Infered* -The system-default color of the engine used. M e.g. in Gtk this should pick whatever the user has chosen as default color < (background or forground depending on usage) for the text.  BA StyleName determines what style to use, taking into account the ) set of rendering preferences given by a  . Typically, style  names will be *-valued field names of  .   The UI type #ground attributes for the modeline $transformation of modeline in focus !ground attributes for the tabbar %a tab that currently holds the focus +a tab that does not have the current focus *ground attributes for the main text views the selected portion empty file marker colours indicates errors in text search matches paren matches other hints current search match  all comments #additional only for block comments applied to language keywords numbers /preprocessor directive (often in Haskell or C) constant 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 expressions %#any standard variable (identifier) &infix operators '4Style of a quotation (e.g. in template haskell) ( stuff that'$s passed to the shell in a Makefile )makefile rule headers *7The style is used to transform attributes by modifying . one or more of the visual text attributes. +4Visual text attributes to be applied during layout. /The text should be show as active or selected. ; This can be implemented by reverse video on the terminal. 4"A style that sets the foreground. 5"A style that sets the background. 6#A style that sets the font to bold 7'A style that sets the style to italics 8*A style that sets the style to underlined 9*A style that sets the style to underlined :The identity transform. ;LConvert a color to its text specification, as to be accepted by XParseColor E      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLE      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLE+,-./0123*   !"#$%&'() 456987:  ;<DCBA@?>=ELKJIHGF      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL Safe-InferedN.Abstract theme that provides useful defaults. OThe default Theme P5A Theme inspired by the darkblue colorscheme of Vim. MNOPMNOPMNOPMNOPNoneQ&Direction of movement inside a buffer TWindow references WSize of a buffer region ZA point in a buffer ]Reference to a buffer. _A mark in a buffer creverse if Backward d direction is in the same style of maybe or either functions, D It takes one argument per direction (backward, then forward) and a ! direction to select the output. QRSTUVWXYZ[\]^_`abcde QRSTUVWXYZ[\]^_`abcdeQSRbcd_`a]^Z[\WXYeTUVQSRTUVWXYZ[\]^_`abcde NonejDFinish an atomic command, for the purpose of killring accumulation. kPut some text in the killring.  It'1s accumulated if the last command was a kill too lDSet the top of the killring. Never accumulate the previous content. mGet the top of the killring. fghijklm fghijklm fghghjklmifghijklm NoneoFTreat the input not as a regex but as a literal string to search for. p)Compile for newline-insensitive matching q,Compile for matching that ignores char case z>Return an escaped (for parseRegex use) version of the string. |-The regular expression that matches nothing. nopqrstuvwxyz{| P                     nopqrstuvwxyz{|nqpoyrstuvwx{|z nqporstuvwxyz{| None}'An extensible record, indexed by type. ~!Class of values that can go in a   or a } . 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, P there is no need to serialize these values: if needed, they will be set in the  user's configuration file. The " constraint ensures that, even if  the user hasn'>t customised this config variable, a value is stil available. Accessor for any &. 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. KAccessor for a dynamic component. If the component is not found, the value  is used. }~    }~~} }~    NoneThe region data type. zThe 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) 1Construct a region from its bounds, emacs style:  the right bound is excluded The empty region 4True if the given point is inside the given region. HTrue 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)  ! !None A window onto a buffer. regular or mini window?  the buffer this window opens to Slist of last accessed buffers (former bufKeys). Last accessed one is first element ;height of the window (in number of screen lines displayed)  view area. = note that the top point is also available as a buffer mark. (identifier for the window (for UI sync) * This is required for accurate scrolling. 2 Scrolling depends on the actual number of buffer 4 lines displayed. Line wrapping changes that number ! relative to the height so we can't use height for that  purpose. OThe actual number of buffer lines displayed. Taking into account line wrapping $Get the identification of a window.  Return a fake window onto a buffer.  " # $   " # $NoneInitial state AHow far did the scanner look to produce this intermediate state? G The state can be reused as long as nothing changes before that point. DRunning function returns a list of results and intermediate states.  Note: the state is the state before/ producing the result in the second component. EThe main type of syntax highlighters. This record type combines all I 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.  % & ' ( WXYZ[\ Z[\WXY % & ' (~None3Mutation actions (also used the undo or redo list)  For the undoredo, we use the partial checkpoint/# (Berlage, pg16) strategy to store / just the components of the state that change. DNote that the update direction is only a hint for moving the cursor E (mainly for undo purposes); the insertions and deletions are always  applied Forward. ) New FBuffer filled from string. * Point of EOF +Return n Chars starting at i of the buffer as a list  Create an overlay for the style sty between points s and e ,-Obtain a style-update for a specific overlay - Add a style overlay between the given points. .Remove a previously added overlay /'Return style information for the range (i,j) Style information Q is derived from syntax highlighting, active overlays and current regexp. The ! returned list contains tuples (l,s,r) where every tuple is to % be interpreted as apply the style s from position l to r in ? the buffer. In each list, the strokes are guaranteed to be E ordered and non-overlapping. The lists of strokes are ordered by 0 decreasing priority: the 1st layer should be painted on top. 0Checks if an Update is valid 1Apply a valid update 2Reverse the given update 34Line at the given point. (Lines are indexed from 1) 4<Point that starts the given line (Lines are indexed from 1) 5$Get begin of the line relatively to point. 6QReturn indices of all strings in buffer matching regex, inside the given region. 7Modify a mark value. 8dReturns the requested mark, creating a new mark with that name (at the supplied position) if needed 7 9 : ; < = > ) * + ? @ , - . A / 0 1 2 3 4 5 B 6 C D E F 7 G H 8 I J K8QRSWZ_r 9 ) * + ? @ , - . A / 0 1 2 3 4 5 B 6 C D E F 7 G H 8 I J* 9 : ; < = > ) * + ? @ , - . A / 0 1 2 3 4 5 B 6 C D E F 7 G H 8 I J KNone.A URList consists of an undo and a redo list.  A new empty . I Notice we must have a saved file point as this is when we assume we are A opening the file so it is currently the same as the one on disk  Add an action to the undo list. E According to the restricted, linear undo model, if we add a command G whilst the redo list is not empty, we will lose our redoable changes. CAdd a saved file point so that we can tell that the buffer has not 4 been modified since the previous saved file point. F Notice that we must be sure to remove the previous saved file points  since they are now worthless. "This undoes one interaction step. !This redoes one iteraction step. undoIsAtSavedFilePoint. True4 if the undo list is at a SavedFilePoint indicating G that the buffer has not been modified since we last saved the file. S Note: that an empty undo list does NOT mean that the buffer is not modified since W the last save. Because we may have saved the file and then undone actions done before  the save.  L M    L M Safe-Infered $Abstraction of the automaton state. (Operational representation of a process  Interactive process description -Abstraction of monadic interactive processes Outputs a result. )Consumes and returns the next character. A Fails if there is no input left, or outside the given bounds. ,Parses and returns the specified character. :Parses and returns the specified list of events (lazily). ,Combines all parsers in the specified list.  option x p will either parse p or return x without consuming  any input. ( N O P Q R S T U V N O P Q R S T U VNoneIImaybe a filename associated with this buffer. Filename is canonicalized. 0The BufferM monad writes the updates performed.  ?Used to specify the behaviour of the automatic indent command.  9Decrease the indentation to the next smaller indentation , hint, if no such hint exists do nothing.  1Increase the indentation to the next higher hint & if no such hint exists do nothing. 9Decrease the indentation to the next smaller indentation 8 hint. If we are currently at the smallest level then  cycle back to the largest 8Increase the indentation to the next higher indentation 5 hint. If we are currently at the highest level of . indentation then cycle back to the lowest. AA Mode customizes the Yi interface for editing a particular data : format. It specifies when the mode should be used and G 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  Follow a "link"4 in the file. (eg. go to location of error message) @Strokes that should be applied when displaying a syntax element 7An action that is to be executed when this mode is set  (buffer-local modeline formatting method # Currently duplicates some of Vim'(s indent settings. Allowing a buffer to J - specify settings that are more dynamic, perhaps via closures, could be  - useful. %*Insert spaces instead of tabs as possible &Size of a Tab 'Indent by so many columns //udpate the syntax information (clear the dirty flag) 0Use in readonly! =9Given a buffer, and some information update the modeline @N.B. the contents of modelines should be specified by user, and  not hardcoded. ><Given a point, and the file size, gives us a percent string ?Adds an overlay to the buffer @Remove an existing overlay B Execute a BufferM7 value on a given buffer and window. The new state of A the buffer is returned alongside the result of the computation. H Execute a BufferMB value on a given buffer, using a dummy window. The new state of  the buffer is discarded. I:Mark the current point in the undo list as a saved state. N0Mode applies function that always returns True. O1Mode applies function that always returns False. QCreate buffer named nm with contents s R Point of eof SExtract the current point TReturn n elems starting at i of the buffer as a list X(Move point in buffer to the given index Z#Revert all the pending updates; don't touch the point. [7Write an element into the buffer at the current point. \1Write the list into the buffer at current point. ]!Insert newline at current point. _=Insert the list at specified point, extending size of buffer `;Insert the list at current point, extending size of buffer a;Insert the char at current point, extending size of buffer b deleteNAt n p deletes n# characters forwards from position p cReturn the current line number dReturn line numbers of marks eGo to line number n. n is indexed from 1. Returns the A actual line we went to (which may be not be the requested line,  if it was out of range) g Set the mode iModify the mode p<Return indices of strings in buffer matched by regex in the  given region. q@Return indices of next string in buffer matched by regex in the  given direction rSet the given mark' s point. tHighlight the selection x.Move point by the given number of characters. ; A negative offset moves backwards a positive one forward. yMove point -1 zMove cursor -n {Move cursor +1 |Move cursor +n }Move point down by n lines. n can be negative. = Returns the actual difference in lines which we moved which ? may be negative if the requested line difference is negative. Move point up one line Move point down one line ,Return the contents of the buffer as a list (Read the character at the current point &Read the character at the given index K This is an unsafe operation: character NUL is returned when out of bounds Delete n+ characters forward from the current point Current column. F Note that this is different from offset or number of chars from sol. 5 (This takes into account tabs, unicode chars, etc.) &Go to line indexed from current point 5 Returns the actual moved difference which of course ; may be negative if the requested difference was negative. @Access to a value into the extensible state, keyed by its type. 0 This allows you to save or retrieve inside a  monad, ie: ' putA bufferDynamicValueA updatedvalue # value <- getA bufferDynamicValueA  perform a  BufferM a5, and return to the current point. (by using a mark)  perform an  BufferM a", and return to the current point  W X Y Z      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ [ \ ] ^ _ ` a br      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~()*  JCBDHcRSdX}Qey{xz|`^_aT[\]b2LMvwErsFGtKghfipq=>Y~87I?@A9:;345Z/n !"   #$%&'NOPlkjmo<WUVur0+,-.61 W X Y Z      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ [ \ ] ^ _ ` a b Safe-Infered '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 9, but do a minimal edition instead of deleting the whole  region and inserting it back.  Swap the content of two Regions 1Modifies the given region according to the given  string transformation function As 9, but do a minimal edition instead of deleting the whole  region and inserting it back. 2Extend the right bound of a region to include it. See a region as a block/rectangular region, : since regions are represented by two point, this returns 1 a list of small regions form this block region. !The string modification function The region to modify   NoneBoundary side Designate a given unit of text. the whole document a verticalN line of text (area of text between two characters at the same column number) "a line of text (between newlines) a single character Turns a unit into its negative+ by inverting the boundaries. For example,  outsideUnit unitViWord5 will be the unit of spaces between words. For units  without boundaries (, , ...), this is the identity  function. kdelimited on the left and right by given characters, boolean argument tells if whether those are included. -a word as in use in Emacs (fundamental mode) ISeparator characters (space, tab, unicode separators). Most of the units  above attempt to identify words/ with various punctuation and symbols included D or excluded. This set of units is a simple inverse: it is true for  whitespace  or  separators@ and false for anything that is not (letters, numbers, symbols,  punctuation, whatever). *unitSep is true for any kind of whitespace/ separator 2unitSepThisLine is true for any kind of whitespace/separator on this line only 3Paragraph to implement emacs-like forward-paragraph/backward-paragraph UParagraph that begins and ends in the paragraph, not the empty lines surrounding it. XUnit that have its left and right boundaries at the left boundary of the argument unit. genAtBoundaryB u d s2 returns whether the point is at a given boundary (d,s) .  Boundary (d,s)" , taking Word as example, means:  Word  ^^ ^^  12 34  1: (Backward,OutsideBound)  2: (Backward,InsideBound)  3: (Forward,InsideBound)  4: (Forward,OutsideBound) rules: A genAtBoundaryB u Backward InsideBound = atBoundaryB u Backward @ genAtBoundaryB u Forward OutsideBound = atBoundaryB u Forward NRepeat an action until the condition is fulfilled or the cursor stops moving. ) The Action may be performed zero times. BDo an action if the current buffer character passes the predicate Generic move operation ^ Warning: moving To the (OutsideBound, Backward) bound of Document is impossible (offset -1!)  genMoveB u b dC: move in direction d until encountering boundary b or unit u. See  for boundary explanation. Generic maybe move operation.  As genMoveB, but don'&t move if we are at boundary already. Move to the next unit boundary As ), unless the point is at a unit boundary HDelete between point and next unit boundary, return the deleted region. 9Region of the whole textunit where the current point is. CNon empty region of the whole textunit where the current point is. 0Region between the point and the next boundary. 6 The region is empty if the point is at the boundary. :Non empty region between the point and the next boundary, ? In fact the region can be empty if we are at the end of file. 7Non empty region at given point and the next boundary, 8Extend the given region to boundaries of the text unit. A For instance one can extend the selection to complete lines, or  paragraphs. > c d e;=2 c d e Safe-InferedJMove point to start of line Move point to end of line Move cursor to origin Move cursor to end of buffer +Move left if on eol, but not on blank line Move x. chars back, or to the sol, whichever is less Move x1 chars forward, or to the eol, whichever is less )Move to first char of next word forwards *Move to first char of next word backwards Move to the next occurence of c 3Move to the character before the next occurence of c "Move to the previous occurence of c 6Move to the character after the previous occurence of c /Move to first non-space character in this line 2Move to the last non-space character in this line 1Go to the first non space character in the line; 9 if already there, then go to the beginning of the line. Move down next n paragraphs   Move up prev n paragraphs  8Return true if the current point is the start of a line  6Return true if the current point is the end of a line  True if point at start of file True if point at end of file 'Get the current line and column number Read the line the point is on Read from point to end of line %Read from point to beginning of line <Get the previous point, unless at the beginning of the file 2Get the next point, unless at the end of the file Delete one character backward 9Delete forward whitespace or non-whitespace depending on  the character under point. :Delete backward whitespace or non-whitespace depending on  the character before point. %capitalise the word under the cursor lowerise word under the cursor )capitalise the first letter of this word )Delete to the end of line, excluding it. *Delete whole line moving to the next line  1Transpose two characters, (the Emacs C-t action) !*Delete trailing whitespace from all lines "Marks &Set the current buffer selection mark #&Get the current buffer selection mark $Exchange point & mark. &>File info, size in chars, line no, col num, char num, percent )Scroll up 1 screen *Scroll down 1 screen +&Scroll by n screens (negative for up) ,<Scroll according to function passed. The function takes the ; | Window height in lines, its result is passed to scrollB  | (negative for up) -+Same as scrollB, but also moves the cursor .-Same as scrollByB, but also moves the cursor /Move to middle line in screen 0%Move cursor to the top of the screen 1(Move cursor to the bottom of the screen 2Scroll by n lines. 3-Move the point to inside the viewable region 4return index of Sol on line n above current line 5&return relative position of the point p . relative to the region defined by the points rs and re 6-Move the visible region to include the point 7Move to n lines down from top of screen 8Move to n( lines up from the bottom of the screen 9Move to middle line in screen ;)Return the region between point and mark <9Return the empty region if the selection is not visible. =KGet the current region boundaries. Extended to the current selection unit. >7Select the given region: set the selection mark at the   and the current point at the . ?2Extend the selection mark using the given region. A<Get a (lazy) stream of lines in the buffer, starting at the next line  in the given direction. FAUses a string modifying function to modify the current selection D Currently unsets the mark such that we have no selection, arguably = we could instead work out where the new positions should be * and move the mark and point accordingly. H(Prefix each line in the selection using  the given string. I6Uncomments the selection using the given line comment 9 starting string. This only works for the comments which ! begin at the start of the line. JMToggle line comments in the selection by adding or removing a prefix to each  line. K;Justifies all the lines of the selection to be the same as  the top line. @ NOTE: if the selection begins part way along a line, the other J lines will be justified only with respect to the part of the indentation  which is selected. L4Replace the contents of the buffer with some string M:Fill the text in the region so it fits nicely 80 columns. OSort the lines of the region. PCHelper function: revert the buffer contents to its on-disk version g      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH&The string that starts a line comment I'The string which begins a line comment 3A potentially shorter string that begins a comment JKLMNOPQg      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQg      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ\      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ Safe-InferedRReturn either a t5 or the number of spaces specified by tabSize in the K IndentSettings. Note that if you actually want to insert a tab character < (for example when editing makefiles) then you should use: insertB '\t'. S:Retrieve the current indentation settings for the buffer. TA specialisation of U. 7 This is the most basic and the user is encouraged to  specialise U on their own. U4This takes two arguments the first is a function to = obtain indentation hints from lines above the current one. @ The second is a function to obtain a set of indentation hints 3 from the previous line. Both of these are in the  : monad although the second seems like it is unnecessary. B However we must take into account the length of tabs which come 8 from the the tab settings and hence we must be in the   monad. DTo get the straightforward behaviour of the indents of all previous : lines until one of them has zero indent call this with:  2autoIndentHelperB fetchPreviousIndentsB (fmap (: [] ) indentOfB) B However commonly we wish to have something more interesting for B the second argument, in particular we commonly wish to have the C last opening bracket of the previous line as well as its indent. V;Cycles through the indentation hints. It does this without  requiring to set/+get any state. We just look at the current ; indentation of the current line and moving to the largest  indent that is W5A function generally useful as the first argument to  U . This searches the lines above 5 the current line for the indentations of each line 2 until we get to a line which has no indentation 6 *and* is not empty. Indicating that we have reached  the outer scope. XAn application of U which adds more 0 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. <In addition to the keyword hints we also do the same as the  default (T!) which is to use any non-closed  opening brackets as hints. Y8Returns the position of the last opening bracket on the , line which is not closed on the same line. 4 Note that if we have unmatched parentheses such as ( ] : then we may not get the correct answer, but in that case  then arguably we don'$t really care if we get the correct 9 answer (at least if we get it wrong the user may notice  their error).  We return a list here as it' s a convenient way of returning : no hint in the case of there being no non-closed bracket : and normally such a hint will be part of a list of hints  anyway. @ NOTE: this could be easily modified to return the indentations ? of *all* the non-closed opening brackets. But I think this is  not what you generally want. @ TODO: we also do not care whether or not the bracket is within ? a string or escaped. If someone feels up to caring about that  by all means please fix this. Z.Returns the offsets of all the given keywords 5 within the given string. This is potentially useful ! as providing indentation hints. [(Returns the offsets of anything that isn't white space after  a keyword on the given line. & This is essentially then the same as Z except that @ for each keyword on the input rather than return the offset at F the start of the keyword we return the offset of the first non-white  character after the keyword. \BReturns the indentation of a given string. Note that this depends ' on the current indentation settings. ]=Returns the length of a given string taking into account the . white space and the indentation settings. ^9Indents the current line to the given indentation level. A In addition moves the point according to where it was on the A line originally. If we were somewhere within the indentation C (ie at the start of the line or on an empty line) then we want 4 to just go to the end of the (new) indentation. C However if we are currently pointing somewhere within the text G of the line then we wish to remain pointing to the same character. _$Indent as much as the previous line `GInsert a newline at point and indent the new line as the previous one. a>Set the padding of the string to newCount, filling in tabs if 1 expandTabs is set in the buffers IndentSettings bHshifts right (or left if num is negative) num times, filling in tabs if 1 expandTabs is set in the buffers IndentSettings cJIncreases the indentation on the region by the given amount of shiftWidth eKReturn the number of spaces at the beginning of the line, up to the point. RSTU*Action to fetch hints from previous lines -Action to calculate hints from previous line Sets the indent behaviour,  see  for a description VWXKeywords to act as hints  Keywords to act as offset hints YZ[\]^_`abcdeRSTUVWXYZ[\]^_`abcdeRSTUVWXYZ[\]^_`abcdeRSTUVWXYZ[\]^_`abcde Safe-InferedQRSTUVWXYZ[\]^_`abcder      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde   Safe-Inferedi;Turn a sequence of (from,style,to) strokes into a sequence : of picture points (from,style), taking special care to B ensure that the points are strictly increasing and introducing & padding segments where neccessary. : Precondition: Strokes are ordered and not overlapping. j=Paint the given stroke-picture on top of an existing picture n0Arrange a list of items in columns over maximum maxNumberOfLines lines o(Arrange a list of items in columns over  numberOfLines lines. fghijklmno fghijklmno fghijklmno fghijklmno! Safe-Infered{%A Posix.popen compatibility mapping. H Based on PosixCompat, originally written by Derek Elkins for lambdabot Q TODO: this will probably be called readProcess in the new process package (2.0) |/Run a command. This looks up a program name in $PATH, but then calls it  directly with the argument. }MRun a command using the system shell, returning stdout, stderr and exit code pqrstuvwxyz{|}~pqrstuvwxyz{|}~{|~}pqrstuvwxyzp qrstuvwxyz{|}~" Safe-Infered A 'Layout a'' wrapped in a state monad for tracking s. This type is not6 itself a monad, but should rather be thought of as a -free version of the  type. Same as lm, but with all s d. See  for an example of its use. .Things with orientations which can be flipped A general bounding box Existential wrapper for  5The type of layout managers. See the layout managers ,  and # for some example implementations. >Given the old layout and the new list of windows, construct a % layout for the new list of windows. OIf the layout manager uses sliding dividers, then a user will expect that most  of these dividers don'2t move when adding a new window. It is the layout  manager'Bs responsibility to ensure that this is the case, and this is the  purpose of the Layout a argument. pThe old layout may come from a different layout manager, in which case the layout manager is free to ignore it. 5Describe the layout in a form suitable for the user. <Cycles to the next variant, if there is one (the default is  ) @Cycles to the previous variant, if there is one (the default is   Relative sizes, for  %Divider position, in the range (0,1) Divider reference Orientations for  and  4UI-agnostic layout schema. The basic constructs are  (horizontal/2vertical) stacks with fixed ratios between window  sizes; and (horizontal/-vertical) pairs with a slider in between (if  available).  Initial position of the divider 9Index of the divider (for updating the divider position) Upper of of the pair Lower of the pair  Orientation  Orientation )The layout stack, with the given weights # TODO: fix strictness for stack (it's still lazy) Accessor for the  with given reference YTrue if the internal layout managers have the same type (but are not necessarily equal). -Windows placed side-by-side, equally spaced. 5Windows placed on top of one another, equally spaced OTall windows, arranged in a balanced binary tree with sliders in between them. Transposed version of  n5 windows on the left; stack of windows on the right. Transposed version of . Special case of  with all  s equal. fThe default layout is  tallLayout g/The initial layout consists of a single window > h i j k l m n o p f q r g s01'  h i j k l m n o p f q r g s#None4Configuration 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. 8Produce a .yi.dbg file with a lot of debug information. Set to  for an emacs-like behaviour. Set to  j% for an emacs-like behaviour, where 0 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"l 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 scroll 6Amount to move the buffer when using the scroll wheel 0Should the scrollbar be shown on the left side? 7Hide scrollbar automatically if text fits on one page. 9Hide the tabbar automatically if only one tab is present =Wrap lines at the edge of the window if too long to display. 9The char with which to fill empty window space. Usually '~' for vi-like  editors, ' ' for everything else.  UI colours ???  $None"Fields that can be modified with ( ), get and modify. %The configuration monad. Run it with  configMain. Accessor for any !, to be used by modules defining 5s. Such modules should provide a custom-named field. .For instance, take the following hypothetical :  5newtype UserName = UserName { unUserName :: String } , deriving(Typeable, Binary, Initializable) #instance YiConfigVariable UserName  $(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. % Safe-Infered +A tab, containing a collection of windows. For UI sync; fixes #304 ;Current layout. Invariant: must be the layout generated by  t, up to changing the s. AReturns a list of all mini windows associated with the given tab Accessor for the windows. If the windows (but not the focus) have changed when setting, then a relayout will be triggered to preserve the internal invariant. jAccessor for the layout manager. When setting, will trigger a relayout if the layout manager has changed. Gets / sets the position of the divider with the given reference. The caller must ensure that the DividerRef is valid, otherwise an error will (might!) occur. A specialised version of fmap. Forces all windows in the tab "Folds over the windows in the tab !Make a tab from multiple windows Make a tab from one window uEquality on tab identity (the )  v u w v u w NoneFThe Editor state  Stack of all the buffers.  Invariant: never empty - Invariant: first buffer is the current one.  'Supply for buffer, window and tab ids.  7current tab contains the visible windows pointed list. dynamic components Mcurrently highlighted regex (also most recent regex for use in vim bindings) Processed events that didn't yield any action yet. AActions to be run when the buffer is closed; should be scrapped. The initial state +Specifies the hint for the next temp buffer's name. 28Create 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. 6<Delete a buffer (and release resources associated with it). 7Return the buffers we have, in no particular order 8MReturn a prefix that can be removed from all buffer paths while keeping them  unique. ;Find buffer with this key <Find buffer with this name =0Find buffer with given name. Fail if not found. >?Make all buffers visible by splitting the current window list. L FIXME: rename to displayAllBuffersE; make sure buffers are not open twice. ?-Rotate the buffer stack by the given amount. @[Perform action with any given buffer, using the last window that was used for that buffer. A%Perform action with any given buffer B"Perform action with current window' s buffer DReturn the current buffer EDisplay a transient message HSet the  background status line IClear the status line MPut string into yank register N)Return the contents of the yank register O)Dynamically-extensible state components. AThese hooks are used by keymaps to store values that result from D Actions (i.e. that restult from IO), as opposed to the pure values 9 they generate themselves, and can be stored internally. The  field is a type-indexed map. +Retrieve a value from the extensible state P<Insert a value into the extensible state, keyed by its type QBAttach the next buffer in the buffer stack to the current window. RDAttach the previous buffer in the stack list to the current window. S7Like fnewE, create a new buffer filled with the String s, 0 Switch the current window to this buffer. Doesn't associate any file B with the buffer (unlike fnewE) and so is good for popup internal  buffers (like scratch) T1Creates an in-memory buffer with a unique name. `A hint for the buffer naming scheme can be specified in the dynamic variable TempBufferNameHint Q The new buffer always has a buffer ID that did not exist before newTempBufferE. c TODO: this probably a lot more complicated than it should be: why not count from zero every time? V0Create a new zero size window on a given buffer W+Create a new window onto the given buffer. X2Attach the specified buffer to the current window YFAttach the specified buffer to some other window than the current one ZeSwitch to the buffer specified as parameter. If the buffer name is empty, switch to the next buffer. [Close a buffer. = Note: close the current buffer if the empty string is given ]*Close current buffer and window, unless it's the last one. ^ Rotate focus to the next window _$Rotate focus to the previous window `KSwaps the focused window with the first window. Useful for layouts such as  HPairOneStack-, for which the first window is the largest. aZMoves the focused window to the first window, and moves all other windows down the stack. b&Swap focused window with the next one c*Swap focused window with the previous one dA fakeF accessor that fixes the current buffer after a change of the current  window. R Enforces invariant that top of buffer stack is the buffer of the current window. eJCounterpart of fixCurrentBufferA_: fix the current window to point to the  right buffer. hLReturn the windows that are currently open on the buffer whose key is given i6bring the editor focus the window with the given key. 0Fails if no window with the given key is found. jGSplit the current window, opening a second window onto current buffer.  TODO: unfold newWindowE here? kVCycle to the next layout manager, or the first one if the current one is nonstandard. lZCycle to the previous layout manager, or the first one if the current one is nonstandard. mHelper function for layoutManagersNext and layoutManagersPrevious n8Next variant of the current layout manager, as given by  o<Previous variant of the current layout manager, as given by  pEnlarge the current window qShrink the current window r3Sets the given divider position on the current tab sECreates a new tab containing a window that views the current buffer. t5Moves to the next tab in the round robin set of tabs u9Moves to the previous tab in the round robin set of tabs vWMoves the focused tab to the given index, or to the end if the index is not specified. wGDeletes the current tab. If there is only one tab open then error out. C When the last tab is focused, move focus to the left, otherwise  move focus to the right. xEClose the current window. If there is only one tab open and the tab + contains only one window then do nothing. y6Make the current window the only window on the screen zESwitch 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. }EDefines an action to be executed when the current buffer is closed. bUsed by the minibuffer to assure the focus is restored to the buffer that spawned the minibuffer. 0todo: These actions are not restored on reload. Etodo: 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 H is to somehow attach the miniwindow to the window that has spawned it.       x y z !"#$%&'()*+,-./012The buffer indentifier /The contents with which to populate the buffer 3456789:;<=>?@ABCDEFGHIJKLMNOPQRS buffer name buffer contents TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} { | } ~|      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}|     *)('&%$#"! +,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}o       x y z !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} { | } ~  Safe-InferedRecord presenting a frontend' s interface. The functions  and  are both run by the editor's main loop, Nin response to user actions and so on. Their relation is a little subtle, and is discussed here: ( to see some code, look at the function  refreshEditor in Yi.Core. ! This is the only place where  and  are used.  the function ! is responsible for updating the  with the L width and height of the windows. Some frontends, such as Pango, need to J modify their internal state to do this, and will consequently change & their display. This is expected.  the function 1 should cause the UI to update its display with ! the information given in the .  the functionalities of  and  overlap to some extent, in R the sense that both may cause the frontend to update its display. The Yi core P provides the following guarantees which the frontend may take advantage of: & in the main editor loop (i.e. in the  refreshEditor function),  0 will be run (possibly multiple times) and then  will L be run. This guarantee will hold even in the case of threading (the  function  refreshEditor& will always be run atomically, using MVars).  between the last run of  and the run of , some changes  may be made to the +. However, the text, text attributes, and P (displayed) window region of all windows will remain the same. However, ( the cursor location may change. FThis guarantee allows frontends which calculate rendering of the text  during the 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 B are called from. In particular, subprocesses (e.g. compilation, ghci) will run  and  from new OS threads (see startSubprocessWatchers in Yi.CoreN). The frontend must be preparaed for this: for instance, Gtk-based frontends should wrap GUI updates in  postGUIAsync.  Main loop &Clean up, and also terminate if given true "Suspend (or minimize) the program $Refresh the UI with the given state HUser force-refresh (in case the screen has been messed up from outside) Set window width and height Reload cabal project views ~ ~ ~~& Safe-InferedInitialise the ui None Content of the top-level loop. "Startup when entering insert mode For insertion-only modes 4Startup bit, to execute only once at the beginning. $The type of user-bindable functions all our threads  input stream output stream &The only mutable state in the program write a/ returns a keymap that just outputs the action a. 7Shut down all of our threads. Should free buffers etc. >Predicate to select exceptions Computation to run Handler   44'  )None Take an , and return the first , and an ArticleDB - *without* that article. QGet the first article in the list. We use the list to express relative priority; d the first is the most, the last least. We then just cycle through - every article gets equal time. CWe remove the old first article, and we stick it on the end of the - list using the presumably modified version. LInsert a new article with top priority (that is, at the front of the list). Serialize given  out. Read in database from  and then parse it into an . "The canonical location. We assume ~/.yi has been set up already. SReturns the database as it exists on the disk, and the current Yi buffer contents. [ Note that the Initializable typeclass gives us an empty Seq. So first we try the buffer Z state in the hope we can avoid a very expensive read from disk, and if we find nothing ; (that is, if we get an empty Seq), only then do we call .  Given an L, dump the scheduled article into the buffer (replacing previous contents). 5Go to next one. This ignores the buffer, but it doesn'%t remove anything from the database. $ However, the ordering does change. MDelete current article (the article as in the database), and go to next one. [The main action. We fetch the old database, we fetch the modified article from the buffer,  then we call the function  updateSetLastA which removes the first article and pushes our modified article  to the end of the list. UAssume 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.   * Safe-Infered optMod f ev produces a  that consumes ev or f ev $Convert a special key into an event Q+ Safe-InferedAStart up the editor, setting any state with the user preferences 1 and file names passed in, and turning on the UI Quit. Redraw Suspend the program @Pipe a string through an external command, returning the stdout 1 chomp any trailing newline (is this desirable?) Todo: varients with marks? -Show an error on the status line and log it. Close the current window. 4 If this is the last window open, quit the program. A CONSIDER: call quitEditor when there are no other window in the   function. O (Not possible since the windowset type disallows it -- should it be relaxed?) 9Start a subprocess with the given command and arguments.  ] ^  !" _# ` a b c$% d e f g h&'() i j*+, k l m n o p q r s t u v w x y z { | } ~  -./0123456789:;<=>?@ABC DEFGHI JKLMNOPQRSTUV WXY Z[\]^ _`abpqrstuvwxyz{|}QRSTUVWXYZ[\]^_`abcder}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}, Safe-Infered[Remove anything starting with uppercase letter. These denote either module names or types. Hoogle'[s output includes a sort of type keyword, telling whether a hit is a package name, syntax, j a module name, etc. But we care primarily about the function names, so we filter out anything containing  the keywords. CQuery Hoogle, with given search and options. This errors out on no 2 results or if the hoogle command is not on path. Filter the output of  to leave just functions. Return module-function pairs.  Call out to ', and overwrite the word at point with  the first returned function.  Call out to 1, and print inside the Minibuffer the results of * searching Hoogle with the word at point. - Safe-Infered. Safe-Infered'Prefix matching function, for use with  &Infix matching function, for use with  AComplete a string given a user input string, a matching function B and a list of possibilites. Matching function should return the 2 part of the string that matches the user string. Same as  , but maps  showFunction# on possible matches when printing    /NoneSwitch out of completion mode. HTry to complete the current word with occurences found elsewhere in the + editor. Further calls try other options.    0 Safe-Infered[A TabDescr describes the properties of a UI tab independent of the particular GUI in use. 1 Safe-Infered  The 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 like Int -> 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.         2None$Start an input session with History /Finish the current input session with history.                 3None #DGlobal searching. Search for regex and move point to that position.  Nothing* means reuse the last regular expression. Just s means use  s; as the new regular expression. Direction of search can be  specified as either Backward or Forward (forwards in the buffer). E Arguments to modify the compiled regular expression can be supplied  as well. $Put regex into regex register %Clear the regex register &"Return contents of regex register (Set up a search. )@Do a search, placing cursor at first char of pattern, if found. M Keymaps may implement their own regex language. How do we provide for this?  Also, what'%s happening with ^ not matching sol? *2Search and Replace all within the current region. > Note the region is the final argument since we might perform B the same search and replace over multiple regions however we are F unlikely to perform several search and replaces over the same region ; since the first such may change the bounds of the region. +-Peform a search and replace on the selection ,7Replace a string by another everywhere in the document .<Search and replace in the region defined by the given unit.  The rest is as in -. 9#Find the next match and select it. " Point is end, mark is beginning. :'Replace all the remaining occurrences. ;Exit from query/ replace.  !"#$%&'Nothing means used previous & pattern, if any. Complain otherwise. . Use getRegexE to check for previous patterns #Flags to modify the compiled regex Backward or Forward ()*The String to search for The String to replace it with  The region to perform this over +The String to search for The String to replace it with ,-./0123456789:;< "nopq !"#$%&'()*+,-./0123456789:;<"$%&#"! nqpo'()*+,-./0145632879:<;"! #$%&'()*+,-./0123456789:;< 4NoneC Tag a type with a documentation F:Open a minibuffer window with the given prompt and keymap A The third argument is an action to perform after the minibuffer A is opened such as move to the first occurence of a searched for  string. If you don't need this just supply  return () G#withMinibuffer prompt completer act: open a minibuffer with prompt. Once  a string s is obtained, run act s.  completer can be used to complete 3 functions: it returns a list of possible matches. O7withMinibufferGen proposal getHint prompt completer act: open a minibuffer  with prompt, and initial content proposal. Once a string s is obtained,  run act s.  completer0 can be used to complete inputs by returning an O incrementally better match, and getHint can give an immediate feedback to the  user on the current input. P9Open a minibuffer, given a finite number of suggestions. UReturns all the buffer names. )=>?@ABCDEFGHIJKLMNOPQRSTU =>?@ABCDEFGHIJKLMNOPQRSTUFNGOPLMHIKJSTURQCDEB@?A=>&=>?@ABCDEFGHIJKLMNOPQRSTU 5NoneV?Given a possible starting path (which if not given defaults to ? the current directory) and a fragment of a path we find all D files within the given (or current) directory which can complete  the given path fragment. F We return a pair of both directory plus the filenames on their own E that is without their directories. The reason for this is that if 0 we return all of the filenames then we get a hint which is way too # long to be particularly useful. W?Given a path, trim the file name bit if it exists. If no path $ given, return current directory. X@Given a possible path and a prefix, return matching file names. Z9A 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. B We essentially return all the files in the given directory which  have the given prefix. VWXYZ[\]^ VWXYZ[\]^ VWXYZ[\]^ VWXYZ[\]^6None _`a _`a_`a _`a ( Safe-Infered CIf file exists, read contents of file into a new buffer, otherwise D creating a new empty buffer. Replace the current window with a new  window onto the new buffer. FIf the file is already open, just switch to the corresponding buffer. ENeed to clean up semantics for when buffers exist, and how to attach  windows to buffers. b+Revert to the contents of the file on disk c'Try to write a file in the manner of vi/vim 6 Need to catch any exception to avoid losing bindings d0Try to write to a named file in the manner of vi/vim e(Try to write to a named file if it doesn't exist. Error out if it does. fGWrite current buffer to disk, if this buffer is associated with a file g>Write a given buffer to disk if it is associated with a file. h Write current buffer to disk as f. The file is also set to f iWrite all open buffers jMake a backup copy of file k>Associate buffer with file; canonicalize the given path name. bcdefghijk bcdefghijk cdefgihjbk bcdefghijk7None l1Config variable for customising the behaviour of p and q. Set this variable using r. See s and finiteListEvaluator for two implementation. nimplementation of p oimplementation of q p)Runs the action, as written by the user. BThe behaviour of this function can be customised by modifying the l variable. q,Lists the action names in scope, for use by p. BThe behaviour of this function can be customised by modifying the l variable. rThe evaluator to use for p and q. saEvaluator implemented by calling GHCi. This evaluator can run arbitrary expressions in the class . .The following two imports are always present:   import Yi ) import qualified Yi.Keymap as Yi.Keymap Also, if the file   $HOME/.yi/local/Env.hs $exists, it is imported unqualified. t3Accessor for the published actions. Consider using u. uhPublish the given action, by the given name. This will overwrite any existing actions by the same name. vQEvaluator based on a fixed list of published actions. Has a few differences from s:  expressions can't be evaluated + all suggested actions are actually valued  (related to the above) doesn'$t contain junk actions from Prelude  doesn',t require GHCi backend, so uses less memory lmnopqrs tuvwxy lmnopqrstuvwxypqlmnorsvtuxwylmnopqrs tuvwxy 8 Safe-Infered Lexer state Return a constant token 4Return a constant token, and modify the lexer state (Convert the parsed string into a token, # and also modify the lexer state 'Convert the parsed string into a token ECombine 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. Ounfold lexer function into a function that returns a stream of (state x token) &z{|}~A lexer !Initial user state for the lexer  (WXYz{|}~({|}~zWXYz{|}~ 9 Safe-Infered: Safe-Infered8Scan one token. Return (maybe) a token and a new state.    ; Safe-Infered8Scan one token. Return (maybe) a token and a new state.   < Safe-Infered8Scan one token. Return (maybe) a token and a new state.   = Safe-Infered8Scan one token. Return (maybe) a token and a new state.   > Safe-Infered8Scan one token. Return (maybe) a token and a new state.   ? Safe-Infered8Scan one token. Return (maybe) a token and a new state.   @ Safe-Infered8Scan one token. Return (maybe) a token and a new state. > ==  A Safe-Infered The different tokens. HlStateC is 0 when outside of a multi-line comment and -1 when inside one. The constructors for Operator( have an apostrophe as a suffix because  e.g. LT is already used by Prelude. 2The 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. QPrefix 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. RPostfix operators. SInfix operators. UTakes a 8 and returns a style to be used for that type of token.  TODO: The  : check is potentially unnecessarily slow. We could split O the Const constructor into two different ones, one for builtins and one for  others. V8Scan one token. Return (maybe) a token and a new state. S      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV R      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVRTVUP     2ONMLKJIHGFEDCBA@?>=<;:987654310/.-,+*)('&%$#"! QSR        10/.-,+*)('&%$#"! 2ONMLKJIHGFEDCBA@?>=<;:9876543PQRSTUV B Safe-InferedX8Scan one token. Return (maybe) a token and a new state. WX WXWXWX C Safe-Inferedd8Scan one token. Return (maybe) a token and a new state. YZ[\]^_`abcd YZ[\]^_`abcd bdZa`_^]\[YcYZa`_^]\[bcd D Safe-Inferedg8Scan one token. Return (maybe) a token and a new state. efg efgfgeefg E Safe-Inferedi8Scan one token. Return (maybe) a token and a new state. hi hihihi F Safe-Inferedk8Scan one token. Return (maybe) a token and a new state. jk jkjkjk G Safe-Infered{8Scan one token. Return (maybe) a token and a new state. lmnopqrstuvwxyz{ lmnopqrstuvwxyz{z{ylxwvutsrqponml xwvutsrqponmyz{ H Safe-Infered}8Scan one token. Return (maybe) a token and a new state. |} |}|}|} I Safe-Infered8Scan one token. Return (maybe) a token and a new state. ~ ~~~ J Safe-Infered8Scan one token. Return (maybe) a token and a new state.   K Safe-Infered8Scan one token. Return (maybe) a token and a new state.   L Safe-Infered8Scan one token. Return (maybe) a token and a new state.   M Safe-Infered8Scan one token. Return (maybe) a token and a new state.   N Safe-Infered8Scan one token. Return (maybe) a token and a new state.   O Safe-Infered2Align each line of the region on the given regex. ' Fails if it is not found in any line. (Get the selected region as a rectangle. X Returns the region extended to lines, plus the start and end columns of the rectangle. %Split a list at the boundaries given    P Safe-InferedC-w C-k Kill the rest of line C-y M-w M-y C-M-w QNone local name of the tag file & TODO: reload if this file is changed path to the tag file directory  tags are relative to this path map from tags to files trie to speed up tag hinting 0Find the location of a tag using the tag table. % Returns a full path and line number #Read in a tag file from the system >Gives all the possible expanded tags that could match a given prefix 1Extends the string to the longest certain length Set a new TagTable Reset the TagTable 'Get the currently registered tag table   R Safe-InferedDirect subtrees of a tree FGiven an approximate path to a leaf at the end of the region, return: p (path to leaf at the end of the region,path from focused node to the leaf, small node encompassing the region) XSearch 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 ASearch the given list, and return the last tree before the given B point; with path to the root. (Root is at the start of the path) ,Return all subtrees in a tree, in preorder. #Return the 1st token of a subtree. $Return the last token of a subtree.   S Safe-Infered   TNone   U Safe-Infered.When applied to an extensions list, creates a  function. KWhen applied to an extensions list and regular expression pattern, creates  a  function. ,Adds a hook to all matching hooks in a list 1Apply a list of mode hooks to a list of AnyModes NCheck whether a mode of the same name is already in modeTable and returns the  original mode, if it isn' t the case. V Safe-InferedW Safe-Infered#The GHCi prompt always begins with >A; this goes to just before it, or if one is already at the start u of the prompt, goes to the beginning of the line. (If at the beginning of the line, this pushes you forward to it.) 2Open a new buffer for interaction with a process. %Send the type command to the process Send command, recieve reply    XNone2Changing 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 argument cabal-configure KRun 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 operation   YNoneDThe Vim keymap is divided into several parts, roughly corresponding C 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 7The given buffer action should be an insertion action. .The given action should be a deletion action. A The only well tested buffer actions are deleting one character, # or one word, forward or backward. 0@eval an ex command to an YiM (), also appends to the ex history 1OLeave a mode. This always has priority over catch-all actions inside the mode. 8        !"#$%&'()*+,-./0123452c      !"#$%&'()*+,-./0123452"c.21     #$%&'()*+,- !354/0+        !"#$%&'()*+,-./012345Z Safe-Infered 74Quits the editor if there are no unmodified buffers > if there are unmodified buffers then we ask individually for = each modified buffer whether or not the user wishes to save B it or not. If we get to the end of this list and there are still ? some modified buffers then we ask again if the user wishes to , quit, but this is then a simple yes or no. 84Quits the editor if there are no unmodified buffers > if there are unmodified buffers then we ask individually for = each modified buffer whether or not the user wishes to save B it or not. If we get to the end of this list and there are still ? some modified buffers then we ask again if the user wishes to , quit, but this is then a simple yes or no. 94Quits the editor if there are no unmodified buffers ; if there are then simply confirms with the user that they  with to quit. >Insert next character, raw ?:Convert the universal argument to a number of repetitions ANOpen a file using the minibuffer. We have to set up some stuff to allow hints  and auto-completion. B/Open a file in a new tab using the minibuffer. G=If on separators (space, tab, unicode seps), reduce multiple * separators to just a single separator. H4Join this line to previous (or next N if universal) I8Prompt the user to give a tag and then jump to that tag 6789:;<=>?@ABCDEFGHIG[6789:;<=>?@ABCDEFGHI6?789G;:<=@CDEF>AB[IGH6789:;<=>?@ABCDEFGHI[ Safe-InferedKAIntroduce a keymap that is compatible with both windows and osx, > by parameterising the event modifier required for commands JKLMNOJKLMNOJKLONMJKLMNO\ Safe-InferedPQRSTUVPQRSTUVTUVPQRSPQRSTUV] Safe-InferedWXYWXYWXYWXY^None_Start Abella in a buffer ` Return Abella'"s buffer; create it if necessary.  Show it in another window. aSend a command to Abella Z[\]^_`a Z[\]^_`aZ[_\]^`a Z[\]^_`a _None(wDRepresents either a variable name or a variable name assigned to an  expression. AssBeg is a variable name maybe followed by an assignment.  AssRst' is an equals sign and an expression. (AssBeg x (Just (AssRst  '=' '5'))) means x = 5.  Instances of Failable4 can represent failure. This is a useful class for = future work, since then we can make stroking much easier.  Instances of  Strokable0 are datatypes which can be syntax highlighted. Normal stroker. Error stroker. LGiven a new style and a stroke, return a stroke with the new style appended  to the old one. ,Given a list of tokens to check for errors (xs) and a list of tokens to  stroke (xs'), returns normal strokes for xs' if there were no errors. ' Otherwise returns error strokes for xs'. Given a list of TT8, if any of them is an error, returns an error stroker, L otherwise a normal stroker. Using e.g. existentials, we could make this K more general and have support for heterogeneous lists of elements which " implement Failable, but I haven't had the time to fix this. Given a TT , return a Stroke for it. The main stroking function.  Main parser. Parser for statements such as return, while, do-while, for, etc.  Parser for blocks7, i.e. a bunch of statements wrapped in curly brackets  or just a single statement. (Note that this works for JavaScript 1.8 lambda style function bodies as  well, e.g. function hello() 5,, since expressions are also statements and  we don'!t require a trailing semi-colon. 6TODO: function hello() var x; is not a valid program. LParser for expressions which may be statements. In reality, any expression L is also a valid statement, but this is a slight compromise to get rid of M the massive performance loss which is introduced when allowing JavaScript # objects to be valid statements.  The basic idea here is to parse the rest of expressions, e.g. + 3 in x  + 3 or [i] in x[i]4. Anything which is useful in such a scenario goes  here. TODO: This accepts [] , but shouldn' t, since x[] is invalid. Parser for expressions. JParses both empty and non-empty arrays. Should probably be split up into 0 further parts to allow for the separation of [] and [1, 2, 3]. Parses a semicolon if it' s there. 4Parses a comma-separated list of valid identifiers. Parses a comment. Parses a prefix operator. Parses a infix operator. Parses a postfix operator. Parses any literal. Parses any literal. Parses any string. Parses any valid number. Parses any valid identifier. Parses any boolean. Parses a reserved word. Parses a special token. Parses an operator. !Expects a token x, recovers with . Expects a special token. Expects an expression. 1General recovery parser, inserts an error token. Weighted recovery. Better name for . Better name for . =TODO: This code is *screaming* for some generic programming. 6TODO: Somehow fix Failable and failStroker to be more generic . This will - make these instances much nicer and we won'!t have to make ad-hoc stuff like  this. bcdefghijklmnopqrstuvwxyz{|}~  fbcdefghijklmnopqrstuvwxyz{|}~f{~}|wzyxivutsrqponmlkjehgfbdcTbdcehgfi vutsrqponmlkjwzyx{~}|   ` Safe-Infered1The main verifier which calls the sub-verifiers. DGiven a list of function declarations, checks for multiple function ( declarations, including the functions' subfunctions.  Given two Tok t, compares the ts. 4Returns a list of the functions in the given block. Given a +, returns the token representing the name. Given a $, returns its inner body as a list. Given a  ValidName+ returns the string representing the name. Like  , but drops the first element in the result.       aNoneHooks for the JavaScript mode.   b Safe-Infered    c Safe-Inferedsyntax-based latex mode syntax-based latex mode dNone(;Convert snippet description list into a SuperTab extension B      !"#$%&'()     8      !"#$%&'()=      !"#$%&'()3       !"#$%&'()     e Safe-Infered*+*+*+*+f Safe-Infered-;Transform a scanner into a scanner that also adds opening,  closing and next tokens to indicate layout. ,-,--,,-gNone.%Exp can be expression or declaration 0let expression 1Data constructor 2Type constructor 2 data constructor same as with the TC constructor 4"Righthandside of functions with |  the PAtom in PGuard' does not contain any comments 6Module identifier 7 An optional 8"Righthandside of functions with = <An wrapper for errors > Where clause @-An atom is a token followed by many comments A&A block of things separated by layout B#A parenthesized, bracked or braced FClass declaration HData declaration RHS IData declaration NType declaration SType signature bThe body of the module eThe module declaration part n The parser C./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn  A./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnBkji.fc_ZTSNIGCBA@?>=9876543210/ghde`ab[\]^UVWXYOPQRJKLMLHDEF:;<lnm .;fc_ZTSNIGCBA@?>=9876543210/ghde`ab[\]^UVWXYOPQRJKLMLHDEF:;<ijklmn  h Safe-InferedopopopopiNone|?Search the given list, and return the 1st tree after the given B point on the given line. This is the tree that will be moved if D something is inserted at the point. Precondition: point is in the  given line. }6Given a tree, return (first offset, number of lines). VCreate a special error token. (e.g. fill in where there is no correct token to parse) S Note that the position of the token has to be correct for correct computation of  node spans. qrstuvwxyz{|}~  qrstuvwxyz{|}~xyz{wqvutsr|}~qvutsrwxyz{|}~  jNoneClever0 haskell mode, using the paren-matching syntax. IExperimental Haskell mode, using a rather precise parser for the syntax.  Return GHCi'"s buffer; create it if necessary.  Show it in another window. Send a command to GHCi Load current buffer in GHCi    k Safe-Infered$$$ l Safe-InferedInitialise the ui m Safe-Infered Safe-Infered               n Safe-InferedHConfiguration information which can be set in the command-line, but not  in the user's configuration file. "Transform the config with options <Static main. This is the front end to the statically linked 2 application, and the real front end, in a sense.  dynamic_main calls = this after setting preferences passed from the boot loader.   ' Safe-Inferedreloads the configuration JSerializes 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. LUsed by both the yi executable and the custom yi that is built from the user's configuration. * The yi executable uses a default config.  Safe-Infered ] ^  !" _# ` a b c$% d e f g h&'() i j*+, k l m n o p q r s t u v w x y z { | } ~  -./0123456789:;<=>?@ABC DEFGHI JKLMNOPQRSTUV WXY Z[\]^ _`abpqrstuvwxyz{|}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdenopqr}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyoNone#YStarts with the given initial config, makes the described modifications, then starts yi.  Set a field.  Get a field. Modify a field. JSets the frontend to the first frontend from the list which is installed. %Available frontends are a subset of: "vte", "vty", "pango", "cocoa", and "batch". 'Sets the frontend, if it is available. #Adds the given key bindings to the ` global keymap'G. 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 L, a mode by the given name must already be registered, or the function will 3 have no effect, and issue a command-line warning. modeBindKeysByName name keys adds the keybindings in keys to all modes with name name' (if it is registered). Consider using  instead. NRegister the given mode. It will be preferred over any modes already defined. modifyMode mode f* modifies all modes with the same name as mode, using the function f. Note that the mode argument is only used by its *. In particular, a mode by the given name e must already be registered, or this function will have no effect, and issue a command-line warning.  mode f =  ( mode) fmodifyModeByName name f modifies the mode with name name using the function f. Consider using  instead. Q the font name, or , for default. Q the font size, or , for default. 7Amount to move the buffer when using the scroll wheel. Q 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? =The 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. 3Produce a .yi.dbg file with debugging information? bRun when the editor is started (this is run after all actions which have already been registered) ~Run after the startup actions have completed, or on reload (this is run after all actions which have already been registered) :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  jj for an emacs-like behaviour, where all deleted text is accumulated in a killring. Consider starting with , , or  instead. ? & ] ^  !" _# ` a b c$% d e f g h&'() i j*+, k l m n o p q r s t u v w x y z { | } ~  -./0123456789:;<=>?@ABC DEFGHI JKLMNOPQRSTUV WXY Z[\]^ _`abpqrstuvwxyz{|}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdenopqr}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} !"#$%&'()*+,-./0123456789:;<VWXYZ[\]^_`abcdefghijkrstuv5rsvut$ |      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ R S T U V { W X Y Z [ \ ] ^ _ ` ` a b c d e fghijklmnopqrstuvwxyz{|}~                               V      !"#$%&''()*+,-./012234567789:;<=>>?@ABCDEFG~H~H~I~J~K~L~M~N~O~P~Q~R~S~T~U~V~W~X~Y~Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrrstuvwxyz{|}~          !!!!!!!!!!!!!!!!!"""""""""" " " " " " """"""""""""""""""" "!"""#"$"%"&"'"(")"*"+","-".#/#0#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?#@#A#B#C#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$m$n$o%p%q%r%s%t%u%v%w%x%y%z%{%|%} ~      f                                                                                                                     e        &     o !"#'$(%)&)')()))*)+),)-).)/)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/p0q0r0r0s0t0u0v1w1x2y2y2z2{2|2}2~22222222222223333333333333333333333333333334444444444444444444444444555555555666((((((((((77777777777777888888888888888888888888888888888899j9:::: : : : : ::: :::::::: :::::::::;;<< <!<<==>>??@@@@"@#@$@%@&@'@ @ @ @@(@)@@*@+@,@-@.@@@/@@0@1@2@3@4@@@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@@@ @E@F@@@@G@@@H@I@AAJA$AKAA'ALAMANAOAPAA%AQARASATAUAVAWAXAYAZA[A\A]A^A_A`AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApA AqArAsAtAuAvAwAxAyAzA{A|A}A~AAAAAAAAAAAAAAAAAAAAAABBCCCClCCC'C C$CCCDDDEEFFGG$G%G&G'G G GG GG(G)GGGGHHIIJJKKLLMMNNOOOOOOOOOPPPPPPPPQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRSSSSST1T1TTTTTTFTTUUUUUUUUUUUUUUUUUUUUUUUUVWWWWWWWWWWWWWXXXXXXXXXXXXXXXX Y Y Y Y Y YYYYYYYYYYYYYYYYYYYYY Y!Y"Y#Y$Y%Y&Y'Y(Y)Y*Y+Y,Y-Y.Y/Y0Y1Y2Y3Y4Y5Y6Y7Z8Z9Z:Z;Z<Z=Z>Z?Z@ZAZBZCZDZEZFZGZHZIZJZK[L[M[N[O[P[Q\\\R\S\L\#\0]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_4_w_x_4_y_z_{_|_}_~_}_____e____________________=_________________________________________`!``````````````````aabbebbbbebbbbbbbbbHbbbIcccdddddddddddddddddddddddddddddddddddddddddddddddddd d d d d ddeeffgggggggggggggg g!gg"geg#g4gg$g%g&g'g(g)g*g+g,g-g.g/g0g1g2g3g4g5g6g7g8g9g:g;g<gg=g>g?g@gAgBgCgDgEgFgGgHg5g;gFggIghhiieiii4iieiIiJiKiiLiMiiNiiiiiOjPjjQjRjSjTjUjVkWkWkXkYkZk[k\k]k^k_k`kakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkylmzm{m|m}m~mmmnnnnnnnn''ooooooooooooooooooooooooooo<oooo3o4o5ooooo;ppppppppppppppppppppppppppppppppq{qqqqqqqqqqVqqrrrrrrssspsqsssssssHsss|ssssssssssstttuuuvvvwwwxxx y y y y y y                            !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  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 J J  [  \  ]  ^  _  `  a  b  b c d c e f g h i h j h k h l h m n o  p  q  r  s  t  u  v  w x y z { | } ~  } ~ } ~ } ~ } ~ } } }                   {                             ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~                           " " " !" "" #" $" %" &" '" (" )" *" +" ,% -% .% /% 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A) B) C+/ D/ E1 F1 G1 H2 I2 J2 K2 L3 M3 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 [4 \4 ]4 ^6 _6 `6 a6 b6 c6 d6 e7 f7 g7 h7 i7 j7 k8 l8 m8 n8 o: p; p< p= p> p? p@ p .A pB pC pD pE pF pG pH pI pJ pK pL pM pN pQ qQ rQ sQ tQ uR vR wR xR yR zR {S |S }S ~S S X Y Y Y Y Y Y Y ^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` ` ` a b b }d d d d d d d d d d g g i i }j   n o o yi-0.6.6.0 Yi.PreludeYi.MonadYi.Char.UnicodeYi.Keymap.CompletionParser.IncrementalYi.DebugYi.Config.Misc Yi.String Data.RopeData.Prototype Yi.UI.Common Yi.EditorYi.EventYi.StyleYi.Style.LibraryYi.Buffer.Basic Yi.KillRingYi.Regex Yi.Dynamic Yi.Region Yi.Window Yi.SyntaxYi.Buffer.Misc Yi.BufferYi.Buffer.Undo Yi.Interact Yi.KeymapYi.Buffer.RegionYi.Buffer.NormalYi.Buffer.HighLevelYi.Buffer.Indent Yi.UI.Utils Yi.Process Yi.Layout Yi.ConfigYi.Config.Simple.TypesYi.Tab Yi.UI.BatchYi.BootYi.File Yi.IReaderYi.Keymap.KeysYi.Core Yi.HoogleYi.Mode.Buffers Yi.CompletionYi.TextCompletion Yi.UI.TabBarYi.Hooks Yi.History Yi.Search Yi.MiniBufferYi.MiscYi.DiredYi.Eval Yi.Lexer.AlexYi.IncrementalParseYi.Lexer.AbellaYi.Lexer.CabalYi.Lexer.Compilation Yi.Lexer.CYi.Lexer.ObjectiveCYi.Lexer.CplusplusYi.Lexer.HaskellYi.Lexer.JavaScript Yi.Lexer.JavaYi.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.Whitespace Yi.RectangleYi.Keymap.Emacs.KillRingYi.TagYi.Syntax.TreeYi.Syntax.OnlineTreeYi.Syntax.DriverYi.ModesYi.Mode.CompilationYi.Mode.Interactive Yi.Command Yi.Keymap.VimYi.Keymap.Emacs.Utils Yi.Keymap.CuaYi.Keymap.EmacsYi.Mode.IReaderYi.Mode.AbellaYi.Syntax.JavaScriptYi.Verifier.JavaScriptYi.Mode.JavaScriptYi.Syntax.Latex Yi.Mode.Latex Yi.SnippetsYi.Snippets.HaskellYi.Syntax.LayoutYi.Syntax.HaskellYi.Syntax.Strokes.HaskellYi.Syntax.ParenYi.Mode.HaskellYi.Mode.Haskell.Dollarify Yi.UI.VtyYi.Config.DefaultYi.MainYi.Config.SimpleShim.ProjectContent Data.TrieDriver Shim.UtilsData.DelayList Control.ExcSystem.CanonicalizePathSystem.FriendlyPathShim.CabalInfoPaths_yi Data.SequenceemptyPreludenubYi.Buffer.ImplementationIndentBehaviourMode modeApplies TestSuiteYibaseGHC.Base++ghc-primGHC.Primseq System.IOprint Data.TuplefstsndGHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negatefail>>=>>fmapreturn fromIntegral toInteger toRationalBoundedEnumEq FractionalIntegralMonadFunctorNumOrdGHC.ReadReadRealRealFracData.Typeable.InternalTypeable GHC.TypesCharDouble integer-gmpGHC.Integer.TypeIntegerIO Data.EitherEitherStringLeftRight Data.MaybeNothing$! writeFileputStrLn Text.Readread Data.ListunlinesreadList readsPrecdivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionGHC.Err undefined Control.Monadwhen=<<maxBoundminBoundfromEnumtoEnumpredsuccGHC.Listlookup replicatenullinitlasttailheadJustMaybesignumabs*+/=compare<=<>maxminbinary-0.5.1.0 Data.BinaryBinary mtl-2.1.2Control.Monad.State.Classgetstransformers-0.3.0.0Control.Monad.Trans.ReaderReaderT runReaderTgreeksymbols checkAmbsdisamb subscripts superscriptsCompletionTreeCT listToTreestepTreeobvious mergeTreescompleteRefreadRefwriteRef modifyRef getsAndModify modifiesRefreadsRef writesRefmodifiesThenReadsRefwithwhenMmaybeM repeatUntilMgetsAProcessLogEntryLSLSuspLFailLDoneLShiftLDislikeLEmptyLLogParserEnterYuckLookprofile countWidthsymboleoffeedZevalLevalL'pushSymspushEof mkProcessruntestNextlookNext recoverWithevalRfullLog initDebugtraceerror logPutStrLnlogError logStreamtraceMtraceM_ ScrollStyle SingleLine SnapToCenter capitalizecapitalizeFirstchomp dropSpaceisBlankfillTextunlines'lines'mapLinesonLinespadLeftpadRightRopereversetoReverseStringtoString fromStringlength countNewLinesappendtakedropsplitAtsplitAtChunkBefore splitAtLinereadFileProto fromProto extractValueoverride.->UIEditor InitializableinitialSemiNum+~-~~-Endom<>iofst3snd3trd3 singletondiscardlistnubSet mapAdjust' mapAlter'mapFromFoldablegroupBy'every commonPrefixfindPL swapFocusputAgetAmodAdummyPutdummyGetEventKeyKTabKEnterKRightKDownKLeftKMenuKUpKNP5 KPageDownKEndKDelKPageUpKHomeKInsKBSKASCIIKPauseKPrtScrKFunKEscModifierMHyperMSuperMMetaMCtrlMShift prettyEvent eventToCharColorDefaultRGB 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 brightwhiteTheme defaultThemedefaultLightTheme darkBlueTheme DirectionForwardBackward WindowRef unWindowRefSizefromSizePoint fromPoint BufferRefMarkmarkId reverseDir mayReverse directionElimKillringkrKilled krContentskrEmptykrEndCmdkrPutkrSetkrGet SearchOption QuoteRegex NoNewLine IgnoreCase SearchExpseInput seCompiledseBackCompiled searchString searchRegexmakeSearchOptsMregexEscapeString emptySearch emptyRegex DynamicValues YiVariableConfigVariablesYiConfigVariableconfigVariableA dynamicValueARegionregionDirection regionStart regionEnd regionFirst regionLast fmapRegion regionSizeintersectRegion unionRegionmkRegion mkRegion' mkSizeRegion emptyRegioninRegion nearRegionincludedRegion regionIsEmptyregionsOverlapWindowisMinibufkey bufAccessListheight winRegionwkey actualLineswinkey dummyWindowCacheScannerscanInit scanLooked scanEmptyscanRunExtHL HighlighterSynHL hlStartStatehlRun hlGetTreehlFocusSpan spanBegin spanContentsspanEndStrokeLength skipScanner emptyFileScan mkHighlighter noHighlighter MarkValue markPoint markGravityUpdateDeletedeleteUpdateStringInsert updatePointupdateDirectioninsertUpdateStringOverlayOvlLayer HintLayer UserLayerUIUpdate StyleUpdate TextUpdateupdateIsDelete mkOverlayChange AtomicChangeInteractivePointURListemptyU addChangeUsetSavedFilePointUundoUredoUisAtSavedFilePointU InteractStateRunningDeadWaiting AmbiguousPChainEndI MonadInteractwrite eventBoundsadjustPriorityPEqequiv deprioritize<||||>acceptedrunWriteprocessOneEvent computeStateoneOfanyEvent eventBetweeneventeventschoiceoption mkAutomaton idAutomaton KeymapSet KeymapProcess KeymapEndoKeymapKeymapMInteractActionextractTopKeymap emptyActionMarkSetfromMarkinsMarkselMarkWinMarksBufferIdBufferM fromBufferM DecreaseOnly IncreaseOnly DecreaseCycle IncreaseCyclemodeNamemodeHL modePrettify modeKeymap modeIndentmodeAdjustBlock modeFollowmodeIndentSettingsmodeToggleCommentSelectionmodeGetStrokesmodeGetAnnotations modePrintTree modeOnLoad modeModeLineAnyModeIndentSettings expandTabstabSize shiftWidthFBufferbmodeshortIdentString identStringminiIdentStringidentA clearSyntaxlastActiveWindowA lastSyncTimeAundosA readOnlyA insertingApointFollowsWindowAfile setPrefCol getPrefColpendingUpdatesAhighlightSelectionArectangleSelectionAkeymapProcessA getModeLine getPercent addOverlayB delOverlayBdelOverlayLayerB runBuffergetMarks runBufferFull getMarkValueBnewMarkB deleteMarkBrunBufferDummyWindow markSavedBbkeyisUnchangedBufferundoBredoBmodeAlwaysAppliesmodeNeverApplies emptyModenewBsizeBpointBnelemsBstreamBindexedStreamBstrokesRangesBmoveTo setInsertingrevertPendingUpdatesBwriteBwriteNnewlineB insertNAt' insertNAtinsertNinsertB deleteNAtcurLn markLinesgotoLnsetMode0 setAnyModesetMode modifyModeonMode withMode0 withModeB withSyntaxB focusSyntax withSyntaxB' regexRegionBregexB setMarkPointB modifyMarkBsetVisibleSelectionaskMarksgetMarkB mayGetMarkBmoveNleftBleftNrightBrightN lineMoveRelmovingToPrefCol moveToColBmoveToLineColBpointOfLineColBforgetPreferCol savingPrefCollineUplineDownelemsBreadBreadAtBdeleteNcurColcolOflineOf solPointB gotoLnFrombufferDynamicValueAsavingExcursionB getMarkPointB savingPointBpointAt askWindow modeNameA modeAppliesAmodeHLA modePrettifyA modeKeymapA modeIndentAmodeAdjustBlockA modeFollowAmodeIndentSettingsAmodeToggleCommentSelectionAmodeGetStrokesAmodeGetAnnotationsAmodePrintTreeA modeOnLoadA modeModeLineA winRegionB deleteRegionB readRegionBreplaceRegionBreplaceRegionB'replaceRegionClever mapRegionB swapRegionsB modifyRegionBmodifyRegionCleverinclusiveRegionBblockifyRegion RegionStyleBlock Exclusive InclusiveLineWise BoundarySide OutsideBound InsideBoundTextUnitgenEnclosingUnitgenUnitBoundaryDocumentVLineLine Character outsideUnitunitWord unitDelimited isWordChar checkPeekB unitViWord unitViWORDunitViWordAnyBndunitViWORDAnyBndunitViWordOnLineunitViWORDOnLineisAnySepunitSepunitSepThisLine atBoundaryBunitEmacsParagraph unitParagraph unitSentenceleftBoundaryUnitgenAtBoundaryB numberOfBwhileBuntilB doUntilB_untilB_ doIfCharBgenMoveB genMaybeMoveBmoveB maybeMoveB transposeB transformBdeleteB regionOfBregionOfNonEmptyB regionOfPartBregionOfPartNonEmptyBregionOfPartNonEmptyAtB readPrevUnitB readUnitB regionStyleAmkRegionOfStyleBunitWiseRegionextendRegionToBoundaries RelPositionWithinBelowAboveBufferFileInfobufInfoFileName bufInfoSize bufInfoLineNo bufInfoColNo bufInfoCharNobufInfoPercentbufInfoModified moveToSol moveToEoltopBbotB leftOnEol moveXorSol moveXorEol nextWordB prevWordBnextCIncnextCExcprevCIncprevCExcfirstNonSpaceB lastNonSpaceBmoveNonspaceOrSolnextNParagraphsprevNParagraphs goUnmatchedBatSolatEolatSofatEof getLineAndColreadLnB readCharB readRestOfLnBreadPreviousOfLnBhasWhiteSpaceBefore prevPointB nextPointB readPrevWordBbdeleteB killWordB bkillWordBuppercaseWordBlowercaseWordBcapitaliseWordB deleteToEoldeleteLineForwardswapBdeleteTrailingSpaceBsetSelectionMarkPointBgetSelectionMarkPointBexchangePointAndMarkB getBookmarkBbufInfoB upScreensB downScreensB upScreenB downScreenBscrollScreensB scrollByB vimScrollB vimScrollByBscrollToCursorBscrollCursorToTopBscrollCursorToBottomBscrollBsnapInsBindexOfSolAbovepointScreenRelPosition snapScreenB downFromTosB upFromBosBmiddleBpointInWindowBgetRawestSelectRegionBgetRawSelectRegionBgetSelectRegionBsetSelectRegionBextendSelectRegionBdeleteBlankLinesB lineStreamBgetMaybeNextLineB getNextLineBgetNextLineWhichBgetNextNonBlankLineBmodifySelectionBmodifyExtendedSelectionBlinePrefixSelectionBunLineCommentSelectionBtoggleCommentSelectionBjustifySelectionWithTopBreplaceBufferContent fillRegion fillParagraph sortLinesrevertBsmallBufferSizetabBindentSettingsB autoIndentBautoIndentHelperB cycleIndentsBfetchPreviousIndentsBautoIndentWithKeywordsBlastOpenBracketHint keywordHintskeywordAfterHints indentOfB spacingOfB indentToBindentAsPreviousBnewlineAndIndentB rePadString indentStringshiftIndentOfRegiondeleteIndentOfRegionindentOfCurrentPosBindexedAnnotatedStreamB applyHeights spliceAnnots strokePicture paintStrokes paintPictureattributesPictureBattributesPictureAndSelB arrangeItems arrangeItems'SubprocessInfoprocCmdprocArgs procHandlehInhOuthErrbufRefseparateStdErr SubprocessIdpopenrunProgCommand shellFileNamerunShellCommandcreateSubprocess readAvailableLayoutM Transposed Transposable transpose RectanglerectXrectY rectWidth rectHeightAnyLayoutManager LayoutManager pureLayoutdescribeLayout nextVariantpreviousVariant RelativeSizeDividerPosition DividerRef OrientationVertical HorizontalLayoutPairdivPosdivRefpairFstpairSndStack orientationwins SingleWindowdividerPositionAlayoutManagerSameTypetallwide slidyTall slidyWide hPairNStack vPairNStacklayoutToRectangles singleWindowpairstack evenStack runLayoutMUIBootConfig startFrontEndconfigUI startActionsinitialActions defaultKmconfigInputPreprocess modeTable debugModeconfigRegionStyleconfigKillringAccumulatebufferUpdateHandlerlayoutManagers configVars CursorStyleFatWhenFocusedAndInsertingFatWhenFocusedNeverFat AlwaysFatUIConfigconfigVtyEscDelayconfigFontNameconfigFontSizeconfigScrollStyleconfigScrollWheelAmountconfigLeftSideScrollBarconfigAutoHideScrollBarconfigAutoHideTabBarconfigLineWrapconfigCursorStyleconfigWindowFill configTheme configStyleconfigFundamentalModeconfigTopLevelKeymapstartFrontEndA configUIA startActionsAinitialActionsA defaultKmAconfigInputPreprocessA modeTableA debugModeAconfigRegionStyleAconfigKillringAccumulateAbufferUpdateHandlerAlayoutManagersA configVarsAconfigVtyEscDelayAconfigFontNameAconfigFontSizeAconfigScrollStyleAconfigScrollWheelAmountAconfigLeftSideScrollBarAconfigAutoHideScrollBarAconfigAutoHideTabBarAconfigLineWrapAconfigCursorStyleAconfigWindowFillA configThemeAFieldConfigM runConfigMcustomVariableTabtkey tabLayoutTabReftabFocustabMiniWindows tabWindowsAtabLayoutManagerAtabDividerPositionA mapWindowsforceTabtabFoldlmakeTabmakeTab1 MonadEditoraskCfg withEditorEditorM fromEditorM bufferStackbuffers refSupplytabs_dynamic statusLinesmaxStatusHeightkillring currentRegexsearchDirection pendingEventsonCloseActionsStatusesStatus liftEditor emptyEditor runEditorTempBufferNameHint tmp_name_basetmp_name_index bufferStackAbuffersA refSupplyAtabs_AdynamicA statusLinesAmaxStatusHeightA killringA currentRegexAsearchDirectionApendingEventsAonCloseActionsAwindowswindowsAtabsA currentTabAdynAnewRef newBufRefstringToNewBuffer insertBuffer forceFold1 forceFoldTabs deleteBuffer bufferSetcommonNamePrefixgetBufferStack findBufferfindBufferWithfindBufferWithNamegetBufferWithNameopenAllBuffersE shiftBufferwithGivenBuffer0withGivenBufferAndWindow0 withBuffer0currentWindowA currentBufferprintMsg printMsgs printStatus setStatus clrStatus statusLinestatusLineInfo setTmpStatussetRegEgetRegE getDynamic setDynamicnextBufWprevBufW newBufferEnewTempBufferEalternateBufferEnewZeroSizeWindow newWindowEswitchToBufferEswitchToBufferOtherWindowEswitchToBufferWithNameE closeBufferEgetBufferWithNameOrCurrentcloseBufferAndWindowEnextWinEprevWinEswapWinWithFirstEpushWinToFirstE moveWinNextE moveWinPrevEfixCurrentBufferA_fixCurrentWindow withWindowEfindWindowWithwindowsOnBufferE focusWindowEsplitElayoutManagersNextElayoutManagersPreviousE withLMStacklayoutManagerNextVariantElayoutManagerPreviousVariantE enlargeWinE shrinkWinEsetDividerPosEnewTabEnextTabE previousTabEmoveTab deleteTabE tryCloseE closeOtherEshiftOtherWindowwithOtherWindowacceptedInputsonCloseBufferEmainendsuspendrefreshuserForceRefreshlayout reloadProjectdummyUIstart topKeymapstartInsertKeymap insertKeymapstartTopKeymapYiAction makeActionYiMrunYiMYiVaryiEditorthreadsyiSubprocessIdSupplyyiSubprocessesyiUiinputoutputyiConfigyiVarTaggedABufferAEditorAYiAwrite'withUIunsafeWithEditorwithGivenBuffer withBuffer readEditor catchDynE catchJustE handleJustEshutdown topKeymapAstartInsertKeymapA insertKeymapAstartTopKeymapAmodelessKeymapSetreloadeditFile ArticleDBADBunADBArticlesplitgetLatestArticle removeSetLastshift insertArticlewriteDBreadDB dbLocationoldDbNewArticlegetBufferContentssetDisplayedArticle nextArticledeleteAndNextArticlesaveAndNextArticlesaveAsNewArticle printableCharpStringcharOfctrlmetasuperhypercharctrlChmetaChhyperChoptModspec>>!>>=!?>>?>>!?*>>?*>>! startEditor quitEditorfocusAllSyntax refreshEditor suspendEditorrunProcessWithInput runAction msgEditor errorEditor closeWindowstartSubprocess sendToProcess withSyntax caseSensitizegv hoogleRawhoogleFunctionshoogleFunModulehoogle hoogleSearch listBuffers mkIsPrefixOf prefixMatch infixMatchcontainsMatch' containsMatchcontainsMatchCaseInsensitivecompleteInListcompleteInListCustomShowcompleteInList' resetCompletemkWordCompletewordCompleteString'wordCompleteString wordComplete' wordComplete completeWordB TabBarDescrTabDescrtabText tabInFocus tabBarDescrtabAbbrevTitleHookTyperunHookHistory_historyCurrent_historyContents_historyPrefix HistoriesdynKeyA miniBuffer historyUp historyDown historyStarthistoryStartGen historyFinishhistoryFinishGen debugHist historyFind historyMovehistoryMoveGenhistoryPrefixSethistoryPrefixSet' SearchResult SearchWrappedPatternNotFound PatternFound SearchMatch setRegexE resetRegexE getRegexEdoSearch searchInitcontinueSearchsearchReplaceRegionBsearchReplaceSelectionB replaceStringsearchAndRepRegionsearchAndRepUnit isearchInitEisearchIsEmpty isearchAddE isearchDelEisearchHistory isearchPrevE isearchNextE isearchWordEisearchFinishEisearchCancelEqrNext qrReplaceAllqrFinish qrReplaceOneCommandArgumentsFilePatternTagRegexTagToKill LineNumber:::DocfromDocspawnMinibufferEwithMinibuffer mkCompleteFnsimpleCompleteinfixComplete' infixCompletenoHintnoPossibilitieswithMinibufferFreewithMinibufferGenwithMinibufferFin anyModeNameanyModeByNameM anyModeByNamegetAllModeNamesmatchingBufferNamesgetAppropriateFiles getFoldermatchingFileNamesadjBlock adjIndent promptFile matchFile completeFile findFileHintdireddiredDirdiredDirBufferrevertEviWrite viWriteTo viSafeWriteTofwriteE fwriteBufferE fwriteToE fwriteAllEbackupE setFileName EvaluatorexecEditorActionImplgetAllNamesInScopeImplexecEditorActiongetAllNamesInScope evaluator ghciEvaluatorpublishedActions publishActionpublishedActionsEvaluatorjumpToE jumpToErrorE consoleKeymapASIPosnposnOfsposnLineposnColToktokTtokLentokPosn AlexStatestLexer lookedOffsetstPosn AlexInput tokToSpantokFromTtokBegintokEnd tokRegion startPosnmoveStr alexGetChar alexGetBytealexCollectCharalexInputPrevChar actionConstactionAndModifyactionStringAndModifyactionStringConst lexScanner unfoldLexerStatescannerTTToken UnrecognizedSkip CommentLine ReservedOpReserved ConsIdentVarIdentNumberOtherOpDotDoubleRightArrow RightArrow BackSlashAndOrOtherExistsForallHlState tokenToStyle tokenToText isComment initState alexScanTokenTextReport CppDirectiveTHQuoteCommentOperator ConsOperatorSpecial StringTokCharTokOpTypeTildaArobase DoubleDot DoubleColon LeftArrowEqualPipe ReservedTypeInstanceClassModuleDeriving OtherLayoutOfDoInLetWhereTypeNewTypeDataImportAs QualifiedHiding CommentTypeCloseOpen startsLayout isSpecial isErrorTokConst 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 alignRegion alignRegionOn getRectangle multiSplit onRectangle openRectanglestringRectangle killRectangle yankRectangle killRegion killLineE killringPutkillRestOfLineyankE killRingSaveEyankPopEappendNextKillETagTable tagFileName tagBaseDir tagFileMaptagTrieTag lookupTagimportTagTablehintTags completeTagsetTags resetTagsgetTagssetTagsFileListgetTagsFileListIsTreesubtreesuniplate emptyNode toksAfterallToks tokAtOrBefore toksInRegiontokenBasedAnnotstokenBasedStrokesfromNodeToFinalfromLeafToLeafAfter getLastPathgetAllSubTreesgetFirstElementgetLastElementgetFirstOffset getLastOffset subtreeRegionsepBysepBy1TreeTipLeafBinmanyTokspath cachedStatesrootfocusedPathunzipFM zipWithFMTokenBasedModefundamentalModelinearSyntaxMode removeAnnotscModeobjectiveCModecppMode cabalModesrmcMode gitCommitMode svnCommitMode ocamlModeperlModerubyMode pythonModejavaMode gnuMakeModeottModewhitespaceMode anyExtensionextensionOrContentsMatch hookModesapplyModeHooks lookupModemode atLastLineghciHome interactIdinteractHistoryMoveinteractHistoryFinishinteractHistoryStartgetInputRegiongetInputsetInput interactive feedCommand queryReply CabalBuffer cabalBufferchangeBufferNameE shellCommandE shellCommandVcabalConfigureE configureExitreloadProjectEbuildRun makeBuildcabalRun cabalBuildEshell searchSourcesgrepFindVimExCmdcmdNamescmdFn completeFnVimOptstildeopcompleteCaseSensitiveenableTagStack listTagStack pushTagStack peekTagStack popTagStackModeMap v_top_level v_ins_charv_opts v_ex_cmds savingInsertBsavingInsertCharBsavingInsertStringB savingDeleteBsavingDeleteCharBsavingDeleteWordBsavingCommandYsavingCommandEmkKeymap keymapSetnilCmdexCmdexCmdsexSimpleCompleteexInfixComplete'exInfixCompletemkExHistCompleteexHistComplete'exHistCompleteexHistInfixComplete'exHistInfixComplete defKeymapexModeexEvalleave leaveInsRepbeginIns beginInsB beginInsE UnivArgument askQuitEditor askSaveEditormodifiedQuitEditor isearchKeymap queryReplaceEexecuteExtendedCommandE evalRegionE insertNextCargToIntreadUniversalArgfindFilefindFileNewTab scrollDownE scrollUpE switchBufferE killBufferE justOneSep joinLinesE promptTagkeymapportableKeymapcutdelcopypasteeKeymapcompletionCaseSensitiveabstract ireaderMode ireadMode abellaModeVimabellaModeEmacs abellaEvalabellaEvalFromProofPoint abellaUndoabella abellaGet abellaSendKeyValue KeyValueErrArrayArrErrArrRestArrContExprExprErrPostExprExprArrExprCondOpExpr ExprFunCall ExprTypeOf ExprAnonFun ExprParen ExprSimpleExprNew ExprPrefixExprObj VarDecAssAssErrAssRstAssBegBlockErrBlockOne ForContentForErrForIn ForNormalParExpr ParExprErr ParametersParErr StatementCommWithElseIfForDoWhileWhileReturnVarDeclFunDecl SemicolonBListFailablestupid hasFailed Strokable toStrokesnormalone modStrokenError failStroker tokenToStroke getStrokesparse statementblockstmtExpropExpr expressionarray semicolon parametersparExprcommentpreOpinOppostOpopTok simpleTokstrToknumToknamebooleanresspcoperplzTokplzSpcplzExprplzanythinghate fromBlockfirstTok errorTokenisErrortoTTfromTTWarnErrWarningUnreachableCodeErrorMultipleFunctionDeclarationverifycheckMultipleFunscheckUnreachablettEqsayisReturn findFunctionsfunNamefunBodynameOf dropWhile'dupsByjavaScriptModehooksAtomParenisNoise tokenToAnnotisBeginisEndfastMode latexMode2 latexMode3MarkInfoDependentMarkInfoValuedMarkInfoendMarkSimpleMarkInfo userIndex startMark SnippetMark DependentMark ValuedMark SimpleMark SnippetCmd SupertabExtSupertab MkSnippetCmd mkSnippetCmdDependentMarksmarks BufferMarks bufferMarkscursor cursorWithdepisDependentMark bufferMarkersmkMarktext&&> runSnippetupdateUpdatedMarksfindEditedMarksdependentSiblingsupdateDependentsupdateDependents'markText setMarkTextwithSimpleRegion markRegionsafeMarkRegion adjMarkRegionfindOverlappingMarksWithfindOverlappingMarksregionsOverlappingMarksoverlappingMarksallOverlappingMarksdependentOverlappingMarksnextBufferMarkisDependentMarkersafeDeleteMarkBmoveToNextBufferMarksuperTab fromSnippetssnippet hsFunctionhsClass layoutHandlerExpPInPLetDCTCPGuard'PGuardContextModidOptRHSPErrorerrorTokmarker commentListPWherePAtomPClasscKeywordcHeadcwherePData'dataConsPData dataKeyword dtypeConsdEqualdataRhsPType typeKeywordtypeConsequalbtypeTSPImport importKeywordqualname'as specification PModuleDecl moduleKeywordexports whereKeywordBodyimportscontent extraContentProgModmodDeclbodyPModulecommentsprogMod indentScannerisBrace ignoredTokengetIndentingSubtreegetSubtreeSpanparse'errTok cleverMode literateMode preciseModeghciGetghciSendghciLoadBuffer ghciInferType QueuedUpdate qUpdatePointqInsertqDelete dollarifydollarifyWithinrunQ openParen closeParen isNormalParenisTuple queueDeletequeueReplaceWith stripComments dollarifyTop dollarifyExprisSimple isCollapsible selectedTreefindLargestWithinwithinsafeLast dollarifyPdollarifyWithinPisNormalParenPisTuplePstripCommentsP dollarifyTopPdollarifyExprP isSimplePisCollapsibleP selectedTreePfindLargestWithinPwithinP safeLastPavailableFrontends defaultConfigdefaultEmacsConfigdefaultVimConfigdefaultCuaConfigtoEmacsStyleConfigtoVimStyleConfigtoCuaStyleConfig ConsoleConfig ghcOptions selfCheckdo_argsyiyiDriverSide RightSideLeftSide configMain%=getmodifysetFrontendPreferences 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 itemVersionitemNameinsertfromListtoList lookupPrefix forcedNextpossibleSuffixes certainSuffixTrie liftMaybe $fBinaryTriemytestmycheckdoneintegralRandomR$fShowCompletionTree $fRefMVar $fRefIORef $fShowZip $fMonadParser$fAlternativeParser$fApplicativeParser$fFunctorParser $fShowRPolish $fShowStepsprocessGetContents recurseDirsafeHeadsplitBy splitElemunSplitrevDropequating dropPrefix dropSuffix netEncode netDecode getNetstring setLogAction setLogfile getLogfilelogSunlessMshortenuncurry3 DelayListdecreaseignoringExceptionprintingException orException normalisePathcanonicalizePathreplaceShorthandsuserToCanonPath expandTilda isAbsolute'guessCabalStanzafindPackageDescguessCabalFileversion getBinDir getLibDir getDataDir getLibexecDirgetDataFileNamelines $fBinaryRope$fMeasuredSizeChunk $fMonoidSizecontainers-0.4.2.1Data.Map$fBinaryHashMap$fInitializableMaybe otherwise$GHC.ShowShowControl.Applicative Applicative Data.FoldableFoldableData.Traversable TraversableBoolIntGHC.IntInt8Int16Int32Int64FalseTruefoldMapDefault fmapDefault mapAccumR mapAccumLforMforsequencemapM sequenceAtraversefindnotElemelem minimumByminimum maximumBymaximumproductsumallanyorand concatMapconcatmsumasum sequence_ sequenceA_forM_mapM_for_ traverse_foldlMfoldl'foldrMfoldr'foldl1foldr1foldlfoldrfoldMapfoldoptionalliftA3liftA2liftA<**><**><*>puremanysome<|> AlternativegetConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipList Data.Functiononfix Data.Functor<$>Control.Category>>><<<.idCategory Text.Show showListWith showParen showStringshowCharshowsShowSshowListshow showsPrecflipconst&&||notdata-accessor-0.2.2.2 Data.Accessor<.setValgetValaccessorAccessorData.Accessor.Basic^:^.^=data-accessor-mtl-0.2.0.3Data.Accessor.Monad.MTL.State%: $fShowEvent $fOrdEvent$fInitializableWindowRef$fSemiNumPointSize $fShowPoint$fShowBufferRef$fBinaryDirection$fBinaryKillring$fUniplatePatternregex-base-0.93.2Text.Regex.BasegetVersion_Text_Regex_BaseText.Regex.Base.RegexLike MatchOffset MatchLength MatchArray MatchTextmrSubs mrSubListmrAftermrMatchmrBeforeMR MatchResult getExecOpts setExecOptsdefaultExecOptdefaultCompOpt blankExecOpt blankCompOpt RegexOptionsmakeRegexOptsM makeRegexM makeRegexOpts makeRegex RegexMaker matchOnceText matchAllText matchTest matchCountmatchAll matchOnce RegexLikematchMmatch RegexContextextractafterbeforeExtractgetAllSubmatches AllSubmatchesgetAllTextSubmatchesAllTextSubmatches getAllMatches AllMatchesgetAllTextMatchesAllTextMatchesregex-tdfa-1.1.8Text.Regex.TDFA=~~=~getVersion_Text_Regex_TDFAText.Regex.TDFA.CommonlastStarGreedy newSyntax rightAssoc multiline caseSensitive CompOption captureGroups ExecOptionRegexDynamic$fInitializableDynamicValues$fBinaryDynamicValues$fBinaryDynamic$fInitializableConfigVariables $fShowRegion$fBinaryRegion $fEqWindow $fShowWindow$fBinaryWindow$fFunctorScanner $fFunctorSpan$fFoldableSpan$fTraversableSpannewBIsizeBInelemsBI overlayUpdate addOverlayBI delOverlayBIstrokesRangesBI isValidUpdate applyUpdateIreverseUpdateIlineAtsolPoint solPoint' regexRegionBI modifyMarkBIgetMarkDefaultPosBI BufferImpl$fBinaryBufferImpl $fOrdOverlay $fEqOverlay$fBinaryMarkValue$fBinaryUpdate getStreamgetIndexedStreamdelOverlayLayercharsFromSolBI newMarkBIgetMarkValueBIdeleteMarkValueBI getMarkBI setSyntaxBI updateSyntaxgetAstfocusAst$fBinaryUIUpdate$fBinaryChange$fBinaryURList$fShowP$fMonoidInteractState$fMonadInteractIwevent $fMonadPlusI$fMonadI$fAlternativeI$fApplicativeI $fFunctorI$fMonadInteractStateTwe$fFunctorMarkSet$fFoldableMarkSet$fTraversableMarkSet$fBinaryMarkSet $fShowFBuffer $fEqFBuffer$fApplicativeBufferM $fBinaryMode$fBinarySelectionStyle$fBinaryFBuffer$fBinaryUTCTime$fBinaryAttributes$fYiVariableRegionStyle$fInitializableRegionStyle$fBinaryRegionStyle$fInitializableAnyLayoutManager$fInitializableLayout$fLayoutManagerTransposed$fTransposableLayout$fTransposableOrientation$fLayoutManagerVPairNStack$fLayoutManagerHPairNStack$fLayoutManagerSlidyWide$fLayoutManagerSlidyTall$fLayoutManagerWide$fLayoutManagerTall$fLayoutManagerAnyLayoutManager$fEqAnyLayoutManager $fShowLayouttabLayoutManager$fEqTab $fShowTab $fBinaryTab$fMonadEditorEditorM$fApplicativeEditorM$fBinaryEditor$fShowTempBufferNameHint$fYiVariableTempBufferNameHint!$fInitializableTempBufferNameHint$fBinaryTempBufferNameHint $fPEqEvent$fYiActionAction()$fYiActionBufferMx$fYiActionEditorMx$fYiActionYiMx $fYiActionIOx$fMonadEditorYiM$fMonadStateEditorYiM $fShowAction $fPEqAction$fYiVariableArticleDB$fInitializableArticleDB$fYiVariableCompletion$fInitializableCompletion$fHookType(->) $fHookTypeYiM$fHookTypeEditorM$fInitializableHistory$fInitializableMap$fYiVariableMap$fBinaryHistory$fYiVariableIsearch$fInitializableIsearch$fPromptableCommandArguments$fDocTypeFilePatternTag$fDocTypeRegexTag$fDocTypeToKill$fDocTypeLineNumber$fPromptable::: $fShow:::$fYiAction(->)x$fPromptableBufferRef$fPromptableAnyMode$fPromptablePoint$fPromptableTextUnit$fPromptableDirection$fPromptableInt$fPromptableChar$fPromptable[]$fYiVariableDiredState$fInitializableDiredState$fBinaryDiredState$fInitializableDiredOpState$fBinaryDiredEntry$fYiVariableDiredOpState$fBinaryDiredOpState$fYiVariableNamesCache$fInitializableNamesCache$fYiConfigVariableEvaluator$fInitializableEvaluator"$fYiConfigVariablePublishedActions$fInitializablePublishedActions $fShowPosn $fOrdPosn $fShowTok $fFunctorTok$fFunctorAlexLastAcc$fInitializableTagsFileList$fInitializableTags$fYiVariableTagsFileList$fYiVariableTags $fBinaryTags$fArbitraryNTTT$fArbitraryRegion$fEqTok$fArbitraryTest $fIsTreeTest$fFoldableTest $fFunctorTree$fFoldableTree$fTraversableTree $fIsTreeTree$fArbitraryPoint$fYiVariableCabalBuffer$fYiVariableMViInsertion$fBinaryMViInsertion$fYiVariableViCmd$fInitializableViCmd $fBinaryViCmd$fYiVariableVimTagStack$fInitializableVimTagStack$fYiVariableAbellaBuffer$fStrokableStatement$fFoldableStatement$fFoldableParameters$fFoldableParExpr$fFoldableForContent$fFoldableBlock$fFoldableVarDecAss$fFoldableExpr$fFoldableArray$fStrokableArray$fStrokableTok$fStrokableKeyValue$fStrokableParExpr$fStrokableParameters$fStrokableExpr$fStrokableVarDecAss$fStrokableBlock$fStrokableForContent$fFailableKeyValue$fFailableExpr$fFailableParExpr$fFailableParameters$fFailableVarDecAss$fFailableBlock$fFailableForContent$fIsTreeStatement$fFoldableKeyValue dropWhile $fShowReport $fShowWarning $fShowError$fYiVariableJSBuffer$fMonoidSupertabExt$fMkSnippetCmdSnippetMark()$fMkSnippetCmdRWSTa$fMkSnippetCmd[]() $fOrdMarkInfo$fYiVariableDependentMarks$fYiVariableBufferMarks$fInitializableDependentMarks$fInitializableBufferMarks$fBinaryMarkInfo $fIsTreeExp $fFoldableExp$fYiVariableGhciBuffer Prop_Functor prop_functorprop_traversabletests $fErrorErrrunManyOnStartuprunManyAfterStartup