ʒ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                     !!!!!!!!!!"""""""#################     $$%&&&&'''''''''' '!'"'#'$'%'&'''(()(*(+(,(-(.(/(0(1(2(3(4(5(6)7)8)9):);)<)=)>)?)@)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)[)\*]*^*_*`*a*b*c*d*e*f+g+h+i+j+k+l+m,n-o-p-q-r-s-t-u-v.w.x.y.z.{.|.}/~////////////////000000000000000000001111111111111111111111111111112222222222222222222222222333333344445555566666666666666666666666666666666 6    7777777777777777777 7!7"7#7$7%7&7'7(7)8*8+9,9-9.9/90: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>{>|>}>~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????@@@AABBBBBBBBBBBBBBBBCCDDEEFFGGHHIIIIIIIIIJJJJJJJJKKKKKK K K K K KKKKKKLLLLLLLLLLLLL L!L"L#L$L%L&L'L(M)M*M+M,M-N.N/N0N1N2N3N4N5N6N7O8O9O:O;O<O=O>O?O@OAOBOCODOEOFOGOHOIOJOKOLPMQNQOQPQQQRQSQTQUQVQWQXQYQZR[R\R]R^R_R`RaRbRcRdReRfRgRhRiRjRkSlSmSnSoSpSqSrSsStSuSvSwSxSySzS{S|S}S~SSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTUUUUUUVVVVVVVWWWXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY Y Y Y Y YYYYYYYYYYYYYYYYYYY Y!Y"Y#Y$Y%Y&Y'Y(Y)Y*Y+Y,Z-Z.Z/Z0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z:Z;Z<Z=Z>Z?[@[A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S]T]U]V^W^X^Y^Z^[^\^]^^^_^`^a^b^c^d^e^f^g^h^i^j^k^l^m^n^o^p^q^r^s^t^u^v^w^x^y^z^{^|^}^~^^^__``aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbcccccccccccccccccccddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefg g g g g gggh%%ui) !"#$%&'()*+,-./01234567project location source sub-directory 89:source directory location  module names "found modules and unknown modules ;  !"#$%&'()*+,-./012  /-*&$!01.+,'()%1"(#!"#$%&'()*+,-./012b<$Triples: (shorthand, name, unicode) cde=fgbcdefgbcfgdebcdefgj >?@ A blank Trie A#Insert a new string into the trie. BC2Take a list of String and compress it into a Trie D>Take a trie and expand it into the strings that it represents E8Takes a trie and a prefix and returns the sub-trie that  of words with that prefix FGDFinds 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 H:Helper function, finds all the suffixes of a given prefix IWHelper function, finds the longest certain path down the trie starting at a given word >?@ABCDEFGHI >??@ABCDEFGHI hiJKjklmLnhijklmnhiklmjnhiijklmnkOMNOPQRSTUVWXYZ[\]^_`abParser process cdefghijkloParser specification pqmnorpqrstuvwxyz{|KCompute the combination of two profiles, as well as which one is the best. }~=Right-eval a fully defined process (ie. one that has no Sus) Intelligent, caching best. stMPush a chunk of symbols or eof in the process. This forces some suspensions. Push some symbols.  Push eof Make a parser into a process. BRun a process (in case you do not need the incremental interface) uvw?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. MTUVWXYZ[\opqrstuvwMT\[ZYXWVUUVWXYZ[\orqppqrstuvwl*A version of canonicalizePath that works. Make a path absolute. "Canonicalize a user-friendly path KMake a path more user-friendly by replacing the home directory with tilda. ;Turn a path into its canonicalized, user-friendly version. XTurn a user-friendly path into a computer-friendly path by expanding the leading tilda. "Is a user-friendly path absolute?  xFSet 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. y?Outputs the given string before returning the second argument. z{|}~Traces x and returns y. Like traceM, but returns (). xyz{|}~xy~{|}zxyz{|}~mnGuess what lib/exe the sourcefile belongs to. CFind a package description file in the given directory. Looks for  .cabal files. Where to look  pkgname.cabal oLSubtraction, but treat maxBound as infinity. i.e. maxBound -? x == maxBound p  %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 / , this does # not add an empty line at the end.  Split a String in lines. Unlike , this does not # remove any empty line at the end. 6A helper function for creating functions suitable for  modifySelectionB and  modifyRegionB. 8 To be used when the desired function should map across  the lines of a region. q'Combination of the Control.Monad.State  and ^ ORerun the monad until the boolean result is false, collecting list of results. ^^r$TGet 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. :Split after the specified line. Lines are indexed from 0. s<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  As  Prelude.nub", 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. 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) 0zipWith, generalized to Traversable structures. 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)   !"#$%&'()*+,                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?-./0123456789:;<=>?@AB @CD AEFGH B C D E F G H IIJKLMNOPQRSTUV J K LWX M N OYZ[\] P Q R S T U V W X Y^_`axyz{|}~ɇD! $&' Y<;XW#":987654RQVUTS *+PHGFE]\ [Z()103A@?>=_`a%2OLMIK.J,NB/C- "SMap an Event to a Char. This is used in the emacs keymap for Ctrl-Q and vim keymap insertSpecialChar Z [ \ ]D-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. "A style that sets the foreground. "A style that sets the background. #A style that sets the font to bold 'A style that sets the style to italics *A style that sets the style to underlined *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      ^ !"#$%&'()*+D      !"#%&'()*+$D         !"#$%&'()*+,-.Abstract theme that provides useful defaults. .The default Theme /5A Theme inspired by the darkblue colorscheme of Vim. 0ETheme originally designed by Joseph Andrew Magnani for TextMate, and I redistributed with explicit permission. It is not usable in the vty UI. 1ATheme originally developed by Matthew Ratzloff for TextMate, and I redistributed with explicit permission. It is not usable in the vty UI. ,-./01,-./01,-./012&Direction of movement inside a buffer 345Size of a buffer region 678A point in a buffer 9:;Reference to a buffer. <=A mark in a buffer >?@Areverse if Backward B 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. C23456789:;<=>?@ABC243@AB=>?;<89:567C243345676789:9:;<<=>?>?@ABCDEFTreat the input not as a regex but as a literal string to search for. F)Compile for newline-insensitive matching G,Compile for matching that ignores char case HIJKLMN _O `P>Return an escaped (for parseRegex use) version of the string. a,Return a pattern that matches its argument. b cFReverse a pattern. Note that the submatches will be reversed as well. QR-The regular expression that matches nothing. P d e f g h i j k l m n o p q r s t u v w x y z { | } ~  DEFGHIJKLMNOPQRDGFEOHIJKLMNQRPDGFEEFGHIJKLIJKLMNOPQR S T U VWDFinish an atomic command, for the purpose of killring accumulation. XPut some text in the killring.  It'1s accumulated if the last command was a kill too Push a string in the killring. YDSet the top of the killring. Never accumulate the previous content. ZGet the top of the killring. STUVWXYZ STUTUWXYZVSTUTUVWXYZ [&An extensible record, indexed by type \ ]>Class of values that can go in the extensible state component 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 Data.Sequence.empty - compare  the mempty of  Data.Monoid. ^_`a!Accessor for a dynamic component bThe empty record [\]^_`ab ]^_`ab\[[\]^^_`abcThe 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 defghijk%Take the intersection of two regions l?Take the union of two regions (including what is between them) ECreate a region from ordered bounds. If 2nd argument is greater than % 1st, then the region will be empty. m1Construct a region from its bounds, emacs style:  the right bound is excluded nopThe empty region q4True if the given point is inside the given region. rHTrue if the given point is inside the given region or at the end of it. s@Returns if a region (1st arg) is included in another (2nd arg) tucdefghijklmnopqrstucdefptmnoefjdqrsiklghucdefdefghijklmnopqrstu vwxregular or mini window? y the buffer this window opens to zSlist of last accessed buffers (former bufKeys). Last accessed one is first element {4height of the window (in number of lines displayed) | view area. = note that the top point is also available as a buffer mark. }(identifier for the window (for UI sync) ~A window onto a buffer. $Get the identification of a window.  Return a fake window onto a buffer. vwxyz{|}~ ~vwxyz{|} vwxyz{|}wxyz{|}~ Initial 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.  56789: 89:567tI3Mutation 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.   buffer text Marks for this buffer syntax highlighting state 0set of (non overlapping) visual overlay regions ;Lowest modified offset since last recomputation of syntax     New FBuffer filled from string. read n bytes from buffer b, starting at i Write string into buffer. Write string into buffer. PShift a mark position, supposing an update at a given point, by a given amount. & Negative amount represent deletions.  Point of EOF Return n Chars starting at i of the buffer 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. Checks if an Update is valid Apply a valid update Reverse the given update 4Line at the given point. (Lines are indexed from 1) <Point that starts the given line (Lines are indexed from 1) $Get begin of the line relatively to point. QReturn indices of all strings in buffer matching regex, inside the given region. Modify a mark value. dReturns the requested mark, creating a new mark with that name (at the supplied position) if needed 823458=H   1    .A URList consists of an undo and a redo list.  A new empty . I Notice we must have a saved file point as this is when we assume we are A opening the file so it is currently the same as the one on disk  Add an action to the undo list. E According to the restricted, linear undo model, if we add a command G whilst the redo list is not empty, we will lose our redoable changes. CAdd a saved file point so that we can tell that the buffer has not 4 been modified since the previous saved file point. F Notice that we must be sure to remove the previous saved file points  since they are now worthless. "This undoes one interaction step. !This redoes one iteraction step. DPrepare undo by moving one interaction point from undoes to redoes. 5Remove an initial interactive point, if there is one 6Insert an initial interactive point, if there is none DRepeatedly undo actions, storing away the inverse operations in the  redo list. Run the undo-function f on a swapped URList making it . operate in a redo fashion instead of undo. undoIsAtSavedFilePoint. True4 if the undo list is at a SavedFilePoint indicating G that the buffer has not been modified since we last saved the file. S Note: that an empty undo list does NOT mean that the buffer is not modified since W the last save. Because we may have saved the file and then undone actions done before  the save.   /$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.  $Convert a process description to an  executable process.  Push an event in the automaton )find all the writes that are accessible.  ,Parses and returns the specified character. :Parses and returns the specified list of events (lazily). ,Combines all parsers in the specified list.  option x p will either parse p or return x without consuming  any input.  immutable unique key undo/ redo list dynamic components 3prefered column to arrive at when we do a lineDown / lineUp updates that haven't been synched in the UI yet     +time of the last synchronization with disk read-only flag 3the keymap is ready for insertion into this buffer Imaybe 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  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)   Use 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   Execute a BufferM7 value on a given buffer and window. The new state of A the buffer is returned alongside the result of the computation. !"#$%& Execute a BufferMB value on a given buffer, using a dummy window. The new state of  the buffer is discarded. ':Mark the current point in the undo list as a saved state. () (*+ )FAnalogous to const, but returns a function that takes two parameters,  rather than one. ,0Mode applies function that always returns True. -1Mode applies function that always returns False. ./Create buffer named nm with contents s *0 Point of eof 1Extract the current point 2Return n elems starting at i of the buffer as a list 3456(Move point in buffer to the given index 7 + ,8#Revert all the pending updates; don't touch the point. 97Write 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 >;Insert the char at current point, extending size of buffer ? deleteNAt n p deletes n# characters forwards from position p @Return the current line number AReturn line numbers of marks BGo 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) C -D Set the mode EFModify the mode GHI .JKLM<Return indices of strings in buffer matched by regex in the  given region. N@Return indices of next string in buffer matched by regex in the  given direction OSet the given mark' s point. PQHighlight the selection /RSTU.Move point by the given number of characters. ; A negative offset moves backwards a positive one forward. VMove point -1 WMove cursor -n XMove cursor +1 YMove cursor +n Z[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. \]^_` 0aMove point up one line bMove point down one line c,Return the contents of the buffer as a list d(Read the character at the current point e&Read the character at the given index K This is an unsafe operation: character NUL is returned when out of bounds fDelete n+ characters forward from the current point gCurrent column. F Note that this is different from offset or number of chars from sol. 5 (This takes into account tabs, unicode chars, etc.) hi 1jk&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. l@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 m perform a  BufferM a5, and return to the current point. (by using a mark) no perform an  BufferM a", and return to the current point pqH      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq  (! "&@ghi01_jA6]^[ab/BkVXUWY=<>f29:;?dc*+ST#OP$%Q)DECFMNe7`\Z'mo8qK,-.IHGJL534nRpHl           !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq rs'Delete an arbitrary part of the buffer t%Read an arbitrary part of the buffer u&Replace a region with a given string. vAs u9, but do a minimal edition instead of deleting the whole  region and inserting it back. wx Swap the content of two Regions 2y1Modifies the given region according to the given  string transformation function !The string modification function The region to modify zAs y9, 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. cdefghijklmnopqrsturstuvwxyz{| xsuvtwyzr{| rstuvwxyz{|J}~Boundary side Designate a given unit of text. 3the 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. 48Common boundary checking function: run the condition on siz# characters in specified direction  shifted by specified offset. -a word as in use in Emacs (fundamental mode) kdelimited on the left and right by given characters, boolean argument tells if whether those are included.  5 6$Tells if a char can end a sentence ( 7, !, ?). 8=Verifies that the list matches all the predicates, pairwise.  If the list is  too small, then return .  9 : ; < =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 ?Is the point at a Unit boundary in the specified  Direction? @3Paragraph to implement emacs-like forward-paragraph/backward-paragraph UParagraph that begins and ends in the paragraph, not the empty lines surrounding it. XUnit that have its left and right boundaries at the left boundary of the argument unit. genAtBoundaryB u d s2 returns whether the point is at a given boundary (d,s) .  Boundary (d,s)" , taking Word as example, means:  Word  ^^ ^^  12 34  1: (Backward,OutsideBound)  2: (Backward,InsideBound)  3: (Forward,InsideBound)  4: (Forward,OutsideBound) rules: A genAtBoundaryB u Backward InsideBound = atBoundaryB u Backward @ genAtBoundaryB u Forward OutsideBound = atBoundaryB u Forward NRepeat an action until the condition is fulfilled or the cursor stops moving. ) The Action may be performed zero times. ANRepeat an action until the condition is fulfilled or the cursor stops moving. ( The Action is performed at least once. BDo an action if the current buffer character passes the predicate Generic move operation ^ Warning: moving To the (OutsideBound, Backward) bound of Document is impossible (offset -1!)  genMoveB u b dC: move in direction d until encountering boundary b or unit u. See  for boundary explanation. Generic maybe move operation.  As genMoveB, but don'&t move if we are at boundary already. Move to the next unit boundary As ), unless the point is at a unit boundary HDelete between point and next unit boundary, return the deleted region. B6What would be the point after doing the given action? * The argument must not modify the buffer. 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. ;}~=}~;}~~aMove 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 %Move cursor to the top of the screen (Move cursor to the bottom of the screen Scroll by n lines. -Move the point to inside the viewable region return index of Sol on line n above current line -Move the visible region to include the point Move to n lines down from top of screen Move to n( lines up from the bottom of the screen Move to middle line in screen )Return the region between point and mark 9Return the empty region if the selection is not visible. KGet the current region boundaries. Extended to the current selection unit. 7Select the given region: set the selection mark at the e  and the current point at the f. 2Extend the selection mark using the given region.  <Get a (lazy) stream of lines in the buffer, starting at the next line  in the given direction.     AUses a string modifying function to modify the current selection D Currently unsets the mark such that we have no selection, arguably = we could instead work out where the new positions should be * and move the mark and point accordingly. (Prefix each line in the selection using  the given string. &The string that starts a line comment 6Uncomments the selection using the given line comment 9 starting string. This only works for the comments which ! begin at the start of the line. 'The string which begins a line comment 3A potentially shorter string that begins a comment MToggle line comments in the selection by adding or removing a prefix to each  line. ;Justifies all the lines of the selection to be the same as  the top line. @ NOTE: if the selection begins part way along a line, the other J lines will be justified only with respect to the part of the indentation  which is selected. 4Replace the contents of the buffer with some string :Fill the text in the region so it fits nicely 80 columns. Sort the lines of the region. CHelper function: revert the buffer contents to its on-disk version a     a     a     Return 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'. :Retrieve the current indentation settings for the buffer. A specialisation of . 7 This is the most basic and the user is encouraged to  specialise  on their own. 4This 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. *Action to fetch hints from previous lines -Action to calculate hints from previous line Sets the indent behaviour,  see Yi.Buffer.IndentBehaviour for a description ;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 5A function generally useful as the first argument to   . 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. An application of  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 (!) which is to use any non-closed  opening brackets as hints. Keywords to act as hints  Keywords to act as offset hints  8Returns 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. !.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 ! 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. (>Set the padding of the string to newCount, filling in tabs if 1 expandTabs is set in the buffers IndentSettings )Hshifts right (or left if num is negative) num times, filling in tabs if 1 expandTabs is set in the buffers IndentSettings *JIncreases the indentation on the region by the given amount of shiftWidth +,KReturn the number of spaces at the beginning of the line, up to the point.  !"#$%&'()*+, !"#$%&'()*+, !"#$%&'()*+,23456789:;<=>?@ABCHcdefghijklmnopqrstu      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+, -.4Configuration record. All Yi hooks can be set here. /0 UI to use. 1UI-specific configuration. 2+Actions to run when the editor is started. 3=Actions to run after startup (after startActions) or reload. 4Default keymap to use. 56#List modes by order of preference. 7Actions available in the  interpreter (akin to M-x in emacs) 88Produce a .yi.dbg file with a lot of debug information. 9Set to  for an emacs-like behaviour. :Set to % for an emacs-like behaviour, where 0 all deleted text is accumulated in a killring. ;<=>?'Font name, for the UI that support it. @'Font size, for the UI that support it. A0Should the scrollbar be shown on the left side? B7Hide scrollbar automatically if text fits on one page. C9Hide the tabbar automatically if only one tab is present D=Wrap lines at the edge of the window if too long to display. E9The char with which to fill empty window space. Usually '~' for vi-like  editors, ' ' for everything else. F UI colours GHI-./0123456789:;<=>?@ABCDEFGHI<=>?@ABCDEFG./0123456789:;HI--. /0123456789:;/0123456789:;< =>?@ABCDEF=>?@ABCDEFGHI pThe Editor state JKLMNOPQStack of all the buffers.  Invariant: never empty - Invariant: first buffer is the current one. RS"Supply for buffer and window ids. T7current tab contains the visible windows pointed list. Udynamic components VWXYMcurrently highlighted regex (also most recent regex for use in vim bindings) Z[Processed events that didn't yield any action yet. \AActions to be run when the buffer is closed; should be scrapped. ]^_`The initial state ab+Specifies the hint for the next temp buffer's name. cdefghijklmnopqrstuvwx8Create 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. The buffer indentifier /The contents with which to populate the buffer yz{|<Delete a buffer (and release resources associated with it). }Return the buffers we have, in no particular order ~MReturn 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. %Perform action with any given buffer "Perform action with current window' s buffer Return the current buffer Display a transient message Set the  background status line Clear the status line Put string into yank register )Return the contents of the yank register )Dynamically-extensible state components. AThese hooks are used by keymaps to store values that result from D Actions (i.e. that restult from IO), as opposed to the pure values 9 they generate themselves, and can be stored internally. The U field is a type-indexed map. +Retrieve a value from the extensible state <Insert a value into the extensible state, keyed by its type BAttach the next buffer in the buffer stack to the current window. DAttach the previous buffer in the stack list to the current window. 7Like 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)  buffer name buffer contents 1Creates 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? +Create a new window onto the given buffer. 2Attach the specified buffer to the current window FAttach the specified buffer to some other window than the current one eSwitch 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 A 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. JCounterpart of fixCurrentBufferA_: fix the current window to point to the  right buffer. LReturn the windows that are currently open on the buffer whose key is given 6bring the editor focus the window with the given key. 0Fails if no window with the given key is found. GSplit the current window, opening a second window onto current buffer.  TODO: unfold newWindowE here? Enlarge the current window Shrink the current window ECreates a new tab containing a window that views the current buffer. 5Moves to the next tab in the round robin set of tabs 9Moves to the previous tab in the round robin set of tabs WMoves the focused tab to the given index, or to the end if the index is not specified. GDeletes the current tab. If there is only one tab open then error out. C When the last tab is focused, move focus to the left, otherwise  move focus to the right. EClose the current window. If there is only one tab open and the tab + contains only one window then do nothing. 6Make the current window the only window on the screen ESwitch focus to some other window. If none is available, create one. ?Execute the argument in the context of an other window. Create > one if necessary. The current window is re-focused after the  argument has completed. 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. pJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~p^]PQRSTUVWXYZ[\MNOJKL_`aqponmlkjihgfrstuvwxyz{|}~bcdep PQRSTUVWXYZ[\JKLKLMNONOPQRSTUVWXYZ[\]^_`abcdecdefghijklmnopqrstuvwxyz{|}~  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     Initialise the ui ! ;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. =Paint the given stroke-picture on top of an existing picture 0Arrange a list of items in columns over maximum maxNumberOfLines lines (Arrange a list of items in columns over  numberOfLines lines.   "[A TabDescr describes the properties of a UI tab independent of the particular GUI in use. #%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 C D 3Content 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. Predicate to select exceptions Computation to run Handler  7Shut down all of our threads. Should free buffers etc.     4 E     3     3     $@ F G H I J K L M N O P"Top-level widget for this window. Q R S T U V W X Y Z [ \ ] ^ _ ` aInitialise the ui b c d eMap GTK long names to Keys fClean up and go home g h iQSynchronize the windows displayed by GTK with the status of windows in the Core. windows paired with their  isFocused state. j k l m n o p q r s tMake a new tab. uMake a new window. v w x y z { | } ~  is foreground? &  '  optMod f ev produces a  that consumes ev or f ev !$Convert a special key into an event "#$%&'N !"#$%&'!"#$%&'  !"#$%&'( 0Make an action suitable for an interactive run.  UI will be refreshed. (AStart up the editor, setting any state with the user preferences 1 and file names passed in, and turning on the UI 8Display the errors buffer if it is not already visible. >Process an event by advancing the current keymap automaton an  execing the generated actions. )Quit. 7Update (visible) buffers if they have changed on disk. 6 FIXME: since we do IO here we must catch exceptions! Hide selection, clear  syntax dirty flag (as appropriate). * +Redraw ,Suspend the program -@Pipe a string through an external command, returning the stdout 1 chomp any trailing newline (is this desirable?) Todo: varients with marks? 6Same as msgEditor, but do nothing instead of printing () ./0-Show an error on the status line and log it. 1Close 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?) Kill a given subprocess 29Start a subprocess with the given command and arguments. 3 45  !"#$%&'()*+,                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?-./0123456789:;<=>?@AB @CD AEFGH B C D E F G H IIJKLMNOPQRSTUV J K LWX M N OYZ[\] P Q R S T U V W X Y^_`axyz{|}~23456789:;<=>?@ABCH[\]^_`abcdefghijklmnopqrstu      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ E      !"#$%&'()*+,-./012345()+,5/01-23.4*()*+,-./012345)G6789:;<=>?@ABCDEFGHIJ KLMNOPQRS T Test 2 Make a new tab. UVWXYZ[ is foreground? &6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[&KLMNOHIJEFG:;<=>?@ABCD6789STPRQUVYWXZ[&6789789: ;<=>?@ABCD;<=>?@ABCDEFGFGHIJIJKLMNOLMNOPQRSTUVWXYZ[* \+Revert to the contents of the file on disk ]'Try to write a file in the manner of vi/vim 6 Need to catch any exception to avoid losing bindings ^0Try to write to a named file in the manner of vi/vim _(Try to write to a named file if it doesn't exist. Error out if it does. `GWrite current buffer to disk, if this buffer is associated with a file a>Write a given buffer to disk if it is associated with a file. b Write current buffer to disk as f. The file is also set to f cWrite all open buffers dMake a backup copy of file e>Associate buffer with file; canonicalize the given path name. \]^_`abcde ]^_`acbd\e \]^_`abcde+f[Remove anything starting with uppercase letter. These denote either module names or types. gHoogle'[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. hCQuery Hoogle, with given search and options. This errors out on no 2 results or if the hoogle command is not on path. iFilter the output of h to leave just functions. jReturn module-function pairs. k Call out to j', and overwrite the word at point with  the first returned function. l Call out to h1, and print inside the Minibuffer the results of * searching Hoogle with the word at point. fghijklfghijklfghijkl,m mmm- no'Prefix matching function, for use with t p&Infix matching function, for use with t qrstAComplete 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. u nopqrstu tuopqrsnnopqrstu. Word completion Awhen doing keyword completion, we need to keep track of the word  we're trying to complete. vSwitch out of completion mode. wHTry to complete the current word with occurences found elsewhere in the + editor. Further calls try other options. xyz{| vwxyz{|{zyxwv|vwxyz{|/}~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). #In the background, 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. }~~}}~0$Start an input session with History /Finish the current input session with history. 1) 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 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 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. The String to search for The String to replace it with  The region to perform this over -Peform a search and replace on the selection The String to search for The String to replace it with 7Replace a string by another everywhere in the document (Search and replace in the given region. n If the input boolean is True, then the replace is done globally, otherwise only the first match is replaced. * Returns the number of replacements done. <Search and replace in the region defined by the given unit.  The rest is as in .  5Create a SearchExp that matches exactly its argument   #Find the next match and select it. " Point is end, mark is beginning. 'Replace all the remaining occurrences. Exit from query/ replace.  "DEFG"DGFE2! .What to prompt the user when asked this type?  Tag a type with a documentation  :Open a minibuffer window with the given prompt and keymap 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 () #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. 7withMinibufferGen 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. 9Open a minibuffer, given a finite number of suggestions. Returns all the buffer names. 3?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. ?Given a path, trim the file name bit if it exists. If no path $ given, return current directory. @Given a possible path and a prefix, return matching file names. 9A 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. 4_ /keep track of the num of successful operations #if True, DOChoice will be bypassed 0Elementary operations for dired file operations @ Map a dired mark operation (e.g. delete, rename, copy) command > into a list of DiredOps, and use procDiredOp to excute them. H Logic and implementation of each operation are packaged in procDiredOp  See askDelFiles for example. K If new elem op is added, just add corresponding procDiredOp to handle it.  no operation 7to feedback, given the state. such as show the result. )prompt a string, provide keybindings for y, n, !, q and optional h (help) R this is useful when overwriting of existing files is required to complete the op  choice !) will bypass following DOChoice prompts. (prompt a string and collect user input. < the embedded list of DiredOps is generated based on input, 8 Remember that the input should be checked with DOCheck 7this is a shortcut, it invokes DCChoice if file exists Usimilar to DOConfirm, but no user interaction. Could be used to check file existence  prompt a yes/no? question. If yes, execute the first list of embedded DiredOps 8 otherwise execute the second list of embedded DiredOps 0remove the buffers that associate with the file ,The full path to the directory being viewed 1 FIXME Choose better data structure for Marks... .Map values are just leafnames, not full paths (keys are just leafnames, not full paths )position in the buffer where filename is =position on line where filename is (all pointA are this col) ;keep the position of pointer (for refreshing dired buffer)         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.    UWrite the contents of the supplied directory into the current buffer in dired format MReturns a tuple containing the textual region (the end of) which is used for click detection C and the FilePath of the file represented by that textual region XReturn a List of (prefix, fullDisplayNameIncludingSourceAndDestOfLink, style, filename) @Return dired entries for the contents of the supplied directory Needed on Mac OS X 10.4 Needed on Mac OS X 10.4          ! " # $ % & ' (jExtract the filename at point. NB this may fail if the buffer has been edited. Maybe use Markers instead. ) * + , - . / 0execute the operations R Pass the list of remaining operations down, insert new ops at the head if needed 1Fmove selected files in a given directory to the target location given  by user input if multiple source & then if target is not a existing dir  then error - else move source files into target dir  else if target is dir  then if target exist 1 then move source file into target dir = else if source is dir and parent of target exists + then move source to target  else error % else if parent of target exist & then move source to target  else error 2Fcopy selected files in a given directory to the target location given  by user input 6askCopyFiles follow the same logic as askRenameFiles, 3 except dir and file are done by different DiredOP 3-delete a list of file in the given directory K 1. Ask for confirmation, if yes, perform deletions, otherwise showNothing f 2. Confirmation is required for recursive deletion of non-empty directry, but only the top level one G 3. Show the number of successful deletions at the end of the excution ^ 4. TODO: ask confirmation for wether to remove the associated buffers when a file is removed 5 4 5\Returns an Interpreter action that loads the desired modules and interprets the expression.  6 7 8 9 : ; <u = > ? @ A B C D E F G H I J K L M N M N M N6$ Lexer state  O P QReturn 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. A lexer !Initial user state for the lexer  Ounfold lexer function into a function that returns a stream of (state x token) '567 ' 567!    opqrstuvw   wstvu  orqp    70 R S T U V W X Y Z [ \ ] ^ _ ` a b  !"# c d e f$%'(8Scan one token. Return (maybe) a token and a new state.   !"#$%&'('($% &#"!  "!  !"#$%'(8 g h i j k l m n o p q r s t u v w x y z { | })*8Scan one token. Return (maybe) a token and a new state. )*)*)*9 ~  +,- /8Scan one token. Return (maybe) a token and a new state. +,-././+-,+-,,-/: 018Scan one token. Return (maybe) a token and a new state. 010101; 238Scan one token. Return (maybe) a token and a new state. 232323< 458Scan one token. Return (maybe) a token and a new state. 454545=Q 6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij klopqr8Scan one token. Return (maybe) a token and a new state. =6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr=orkl6qpmn7EDCBA@?>=<;:98jeihgfQdcba`_^]\[ZYXWVUTSRFPONMLKJIHG;67EDCBA@?>=<;:9889:;<=>?@ABCDEF PONMLKJIHGGHIJKLMNOPQdcba`_^]\[ZYXWVUTSRRSTUVWXYZ[\]^_`abcdeihgffghijklopqr>m   sThe different tokens. tuvwxyz{|}~Prefix operators. NOTE: Add', is also a valid prefix operator, but since  it'.s completely useless in the real world, we don't care about it here. / Doing this makes parsing much, much easier. Postfix operators. Infix operators. 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. The constructors for Reserved( have an apostrophe as a suffix because  Default" is already used. Also note that  Undefined' is not intended as  some sort of backup reserved word for things we don't care about -- it  really means the  undefined built-in in JavaScript.  The Line0 constructor represents a single-line comment. Start and End G represent the start and end of a multi-line comment, respectively. Text 0 represents the text in a multi-line comment.      Takes a s8 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. Given a String& representing an operator, returns an  with the  appropriate constructor. Given a String) representing a reserved word, returns a  with  the appropriate constructor. 8Scan one token. Return (maybe) a token and a new state.  Rstuvwxyz{|}~Rs}|{zyxwvut~Ns }|{zyxwvuttuvwxyz{|}~ ?              ! " # $ % & '8Scan one token. Return (maybe) a token and a new state.   @ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A8Scan one token. Return (maybe) a token and a new state. B C DA" E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ `8Scan one token. Return (maybe) a token and a new state. a b c dB' e f g h i j k l m n o p q r s t u v w x y z8Scan one token. Return (maybe) a token and a new state. { C | } ~  8Scan one token. Return (maybe) a token and a new state. D- 8Scan one token. Return (maybe) a token and a new state. E 8Scan one token. Return (maybe) a token and a new state. F 8Scan one token. Return (maybe) a token and a new state. G         8Scan one token. Return (maybe) a token and a new state. H                   ! " #8Scan one token. Return (maybe) a token and a new state. I 2Align 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    JC-w C-k Kill the rest of line C-y M-w M-y C-M-w Klocal 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 (5Super simple parsing CTag format 1 parsing algorithm 5 TODO: support search patterns in addition to lineno  #Read in a tag file from the system  >Gives all the possible expanded tags that could match a given prefix  1Extends the string to the longest certain length Set a new TagTable Reset the TagTable 'Get the currently registered tag table                L,Direct subtrees of a tree  ) * +(Prune the nodes before the given point. ; The path is used to know which nodes we can force or not. 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) ,MReturn the first element that matches the predicate, or the last of the list  if none matches. -^Return the element before first element that violates the predicate, or the first of the list % if that one violates the predicate. .2Given a path to a node, return a path+node which ; node that encompasses the given node + a point before it. 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 / 0PTakes a list of (node, index of already inspected child), and return all leaves % in this node after the said child). 1?Given a root, return all the nodes encountered along it, their 5 paths, and the index of the child which comes next. 2 3 4 5 64Return all leaves (with paths) inside a given root. 7?Return all subtrees in a tree; each element of the return list > contains paths to nodes. (Root is at the start of each path) 8 9 : ;ASearch the given list, and return the last tree before the given B point; with path to the root. (Root is at the start of the path)  ,Return all subtrees in a tree, in preorder. !#Return the 1st token of a subtree. < = >"$Return the last token of a subtree. #$% ?6Given a tree, return (first offset, number of lines). &' !"#$%&'&'$#!" % !"#$%&'M ()*+ @ A B, C D()*+,(+*),(+*))*+,N -./0123456 -./0123456 3-./012456 -./012./0123456O E789:;<=>?@ABC FDEF GDetermines if the file'2s extension is one of the extensions in the list. G.When applied to an extensions list, creates a Mode.modeApplies function. HKWhen applied to an extensions list and regular expression pattern, creates  a Mode.modeApplies function. I,Adds a hook to all matching hooks in a list J1Apply a list of mode hooks to a list of AnyModes KNCheck whether a mode of the same name is already in modeTable and returns the  original mode, if it isn' t the case. 789:;<=>?@ABCDEFGHIJK78;<=>?AEDBCGH9@IJKF:789:;<=>?@ABCDEFGHIJKPLLLLQ MNO#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.) PQRSTUVW2Open a new buffer for interaction with a process. X%Send the type command to the process YSend command, recieve reply MNOPQRSTUVWXY MNOPQRSTUVWXY MNOPQRSTUVWXYRZ[\]2Changing 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 abcKRun the given commands with args and pipe the ouput into the build buffer, $ which is shown in an other window. def cabal-build gh(Search the source files in the project. iPerform a find+grep operation j@Inserting a template from the templates defined in Yi.Templates Z[\]^_`abcdefghij]^_Z[\`abcdefghijZ[\[\]^_`abcdefghijSy H I JThe action performed first K&The action performed before insertion L The position _before_ insertion MThe position _after_ insertion N%The action performed after insertion O P Q R S T U V W X Y Z [ \ ] ^ _ `klmnopqrst a b c d e f guvwxyDThe 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. z{Top level mode |vim insert mode }~ h i j k l m n o p q r s t u v7The 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.  w x y z { | } ~    >write the current buffer, but only if modified (cf. :help :x) >viSearch is a doSearch wrapper that print the search outcome. ' TODO: consider merging with doSearch Try to do a substitution OLeave a mode. This always has priority over catch-all actions inside the mode.  6Insert mode is either insertion actions, or the meta (E SC) action  TODO repeat  Keyword 0]klmnopqrstuvwxyz{|}~0]yz{|}~pqrstklmnouvxw/klmnolmnopqrstqrstuvwxyz{|}~z{|}~T 4Quits 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. 3Is there a proper file associated with the buffer? 9 In other words, does it make sense to offer to save it? 4Quits the editor if there are no unmodified buffers ; if there are then simply confirms with the user that they  with to quit. Insert next character, raw :Convert the universal argument to a number of repetitions NOpen a file using the minibuffer. We have to set up some stuff to allow hints  and auto-completion. /Open a file in a new tab using the minibuffer. =If on separators (space, tab, unicode seps), reduce multiple * separators to just a single separator. 4Join this line to previous (or next N if universal) ;Shortcut to use a default list when a blank list is given. * Used for default values to emacs queries 8Prompt the user to give a tag and then jump to that tag Opens the file that contains tag(. Uses the global tag table and prompts + the user to open one if it does not exist Call continuation act* with the TagTable. Uses the global table ! and prompts the user if it doesn't exist `bf`fbUAIntroduce a keymap that is compatible with both windows and osx, > by parameterising the event modifier required for commands  V  WX    Start Abella in a buffer  Return Abella'"s buffer; create it if necessary.  Show it in another window. Send a command to Abella YgDRepresents 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. f      !"#$%&'()*+f      !"#$%&'()*+f        !"#$%&'()*+Z,-./01231The main verifier which calls the sub-verifiers. 4DGiven a list of function declarations, checks for multiple function ( declarations, including the functions' subfunctions. 56 Given two Tok t, compares the ts. 7894Returns 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. >,-./0123456789:;<=>12/0,.-3456789:;<=>,.--./001223456789:;<=>[ ? @Hooks for the JavaScript mode. The  compiler. :Returns the JS verifier buffer, creating it if necessary. +Creates a new empty buffer and returns it. IGiven a filename, a BufferRef and a list of errors, prints the errors in  that buffer. ?@?@?@\ABCDEFGHIJKLMNOPQRABCDEFGHIJKLMNOPQRHGFAEDCBIJKLMNOQPRAEDCBBCDEFGHIJKLMNOPQR] STsyntax-based latex mode Usyntax-based latex mode STUUTSSTU^+VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;Convert snippet description list into a SuperTab extension 8VWXYZ[\]^_`abcdefghijk lmnopqrstuv wxyz{|} ~ 0kgjih`dbaefefcefc]^_Z[\XYlmnopqrstuvwxyz{|}~VW+VWWXYYZ[\[\]^_^_` dbaefefcefcabcdefgjihhijklmnopqrstuvwxyz{|}~_`  ;Transform a scanner into a scanner that also adds opening,  closing and next tokens to indicate layout. a%Exp can be expression or declaration let expression Data constructor Type constructor 2 data constructor same as with the TC constructor "Righthandside of functions with |  the PAtom in PGuard' does not contain any comments Module identifier  An optional "Righthandside of functions with = An wrapper for errors  Where clause -An atom is a token followed by many comments &A block of things separated by layout #A parenthesized, bracked or braced Class declaration Data declaration RHS Data declaration Type declaration Type signature The body of the module The module declaration part   6Check if a token is a brace, this function is used to - fix the layout so that do { works correctly 5Theese are the tokens ignored by the layout handler.  The parser pModule parse a module #Parse a body that follows a module pEmptyBL# A parser returning an empty block Parse a body of a program Parse Variables Parse VarIdent and ConsIdent Parse an operator using please Parse any operator Parse a consident Parse many variables DParse a nextline token (the nexLine token is inserted by Layout.hs) Parse a startBlock token Parse a endBlock token sym f returns a parser parsing f as a special symbol  exact tokList parse anything that is in tokList please p! returns a parser parsing either p or recovers with the  (Special ! ) token. Parse anything, as errors Parse an ConsIdent Parse a keyword 6Parse an unary operator with and without using please Parse comments Parse something thats optional -Parse an atom with, and without using please %Parse an atom with optional comments  pSepBy p sep parse zero or more occurences of p , separated  by sep, with optional ending sep, 9 this is quite similar to the sepBy function provided in E Parsec, but this one allows an optional extra separator at the end. 4 commaSep p = p `pSepBy` (symbol (==(Special ','))) ESeparate a list of things separated with comma inside of parenthesis Parse a comma separator Parse a Module declaration %Check if next token is in given list Parse several imports Parse one import Parse simple type synonyms Parse data declarations ;Parse second half of the data declaration, if there is one Parse a deriving    Parse for all    Parse optional strict variables Exporting module Parse a Let expression Parse a Do block  Parse part of a lambda binding. Parse an Of block Parse classes and instances 4 This is very imprecise, but shall suffice for now. * At least is does not complain too often. %Parse some guards and a where clause CRight-hand-side of a function or case equation (after the pattern) The RHS of an equation. Parse many of something :Parse a some of something separated by the token (Special  =) :Parse a some of something separated by the token (Special  =), or nothing  pBlocks'* :: Parser TT r -> Parser TT (BL.BList r) >Parse a block of some something separated by the tok (Special  =) 'Parse something surrounded by (Special \) and (Special [) EParse something that can contain a data, type declaration or a class  A normalA expression, where none of the following symbols are acceptable. 5Parse an expression, as a concatenation of elements. !5Parse an expression, as a concatenation of elements. " Parse an element of an expression or a pattern.  atC is a list of symbols that, if found, should be considered errors. #$7List of things that allways should be parsed as errors %2List of things that should not be parsed as noise &'AThese symbols are always properly recognized, and therefore they  should never be accepted as noise inside expressions. 2Parse parenthesis, brackets and braces containing - an expression followed by possible comments ()*+ABA;b,Get strokes Module for module -Get strokes for Imports .-Get strokes for expressions and declarations /0123456789:;<c?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). =d>?@AClever0 haskell mode, using the paren-matching syntax. IExperimental Haskell mode, using a rather precise parser for the syntax. BCDE8Returns true if the token should be indented to look as inside the group. FGHIJKLMNOP)Keyword-based auto-indenter for haskell. QStart GHCi in a buffer  Return GHCi'"s buffer; create it if necessary.  Show it in another window. Send a command to GHCi Load current buffer in GHCi Re$$$$f(STUVty V screen size WXYZZCopy of the editor state, local to the UI, used to show stuff when the window is resized. [\]^_!the picture currently displayed. `cursor point on the above aInitialise the ui bcClean up and go home defghi(Redraw the entire terminal from the UI. j<Construct images for the tabbar if at least one tab exists. k8Determine whether it is necessary to render the tab bar lmn&Return a rendered wiew of the window. oDraw a window  TODO: horizontal scrolling. pRenders text in a rectangle.  This also returns < * the index of the last character fitting in the rectangle E * the position of the Point in (x,y) coordinates, if in the window. /The height of the part of the window we are in .The width of the part of the window we are in ,The position of the first character to draw The position of the cursor 8The number of spaces to represent a tab character with. The data to draw. qrsDCalculate window heights, given all the windows and current height. " (No specific code for modelines) tu/Convert a Yi Attr into a Vty attribute change. vwApply the attributes in sty and changes to cs . If the  attributes are not used, sty and changes are not evaluated. xyg zList of published Actions      {6Input preprocessor: Transform Esc;Char into Meta-Char  Useful for emacs lovers ;) |6Open an emacs-like scratch buffer if no file is open. }               h~#Argument parsing. Pretty standard. 3List of editors for which we provide an emulation. usage string. "Transform the config with options AUpdate the default configuration based on a command-line option. <Static main. This is the front end to the statically linked 2 application, and the real front end, in a sense.  dynamic_main calls = this after setting preferences passed from the boot loader. % Q  !"#$%&'()*+,                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?-./0123456789:;<=>?@AB @CD AEFGH B C D E F G H IIJKLMNOPQRSTUV J K LWX M N OYZ[\] P Q R S T U V W X Y^_`axyz{|}~      ^ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH[\]^_`abcdefghijklmnopqrstu      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ E      !"#$%&'()*+,-./012345\]^_`abcde     vwxyz{v|}v~v~vvvvvvvvvvvwvwvwvwvvvvvvwvwvvvvvvyyyvvwvvvvvvvv|v|vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwvwvvvvvkkkkkkkkk      !"#$%&'(r)r*r+r,r-rr.r/r0r1r2r3r4r5r6rr7s8s8s9s:s;s< = > ?@ABCDEFGHIJKLMNOPQRSTU V V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q rstuvwwxyz{|}~-      ttttttt t!t"t#t$t%t&t't(t)t*t+t,t-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_``abcdeffghijklmmnopqrstuvwxyz{||}}~      !"#$%&'()*+,-./00123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       ?                                                                                               ! " # $ % & ' ( ) * > + , - . / 0 1 2 3!4!5!6!7!8!9!:!;!<!=">"?"?"@"A"B"C#D#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#SYTUVWXYZZ[\\]^_`  abcdefghiBjklmnopqrstuvw$3$x%y&z&{&|&}'~'''''''''''''''''((((((((((((((/))))))))))0)))))))))))))))))))))))))m)))**********+++++++,--------......./////////////////000000000000000000001111111111 1 1 1 1 11111111111111112222 2!2"2#2$2%2&2'2(2)2*2+2,2-2.2/202122232425363738393:3;3<4=4>4?4@5A5B5C5D5E6F6G6G6H6I6J6K6K6L6M6N6O6O6P6Q6R6S6T6U6V6W6X6Y6Z6[6\6]6^6_6`6a6b6cd=e7f7g7h7i7j7k7l7m7n7o7k7p7q7r7s7t7u7v7l7w7x7y7z7{7|7}7~78~89g999~9:~:;~;<~<=f=g=h=======k=l=m=n===o======r=s==t======w=y=====================z={=|==}=~===>g>>>>o>>>>>>>z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>l>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>f>>>>~>{>?z?g?????????~?|?@z@~@A~ABgBBBBBkBlBBmBnBBBoB{B~BC~CD~DE~EF~FG~GH~HIIIIIIIIIJJJJJJJJKKKKK K K K K KKKKKKKLLLLLLLLLLLL L!L"L#L$L%L&L'L(L)M*M+M,M-M.NNN/N0N1N2N3NN4N5O6O7O8O9O:O;O<O=O>O?O@OAOBOCODOEOFOGOHOIOJPKQLQKQMQNQOQPQQQRQSQTQUQVQWRXRXRYRZR[R\R]R^R_R`RaRbRcRdReRfRgShShSiSjSkSlSlSmSnSoSpSqSrSsStStSuSvSwSxSySzS{S|S}S~SSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTUUUUUUVtVtVVVVVWWWXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY*YYYYYYYY YYYYYYYYYYYYYYYYYYYYYYYYYY Y Y Y Y YYYYYYYYYYYZZZZZZZZZ Z!Z"Z#Z$Z%Z&Z'Z(Z)Z*[+[,\*\\\-\.\\f\/\\\\\0\{\\1\2\]3]4]5^6^7^8^9^:^:^;^<^<^=^>^?^@^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^___``d`aabacadaeafagahaiajakalamanaoapa-aqaaraa.asatauavawaxayaza{a|a}a~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*aabb0c*ccc-cc.ccccc/cccccccc0dd3ddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef3ggggggggh+%%iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjj.jj-jjjjjjjkk k k k k k kkkkkkkkkkkkkkkkkkk k!k"k#k$k%k&k'k(k)k*k+k,k-k-k.k/k0k1k2k3k4k5k6k7k8k9k:k;k<k=k>k?k@kAkBkCkDkEkFkGkHkIkJkKlLlMlNlOlPlQlRSTmUmVmGmHmWmXmYmZm[m\mm]m^mRm_m`mambmcmdmemfmgmhmimjmkm%mlmmmnnonpnqorosootpupvpwpxpypzp{p|p}p~vqr)rrrrrrrrrrrrrrrrrr  vwvvvvyyvvvvyyvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwvw vw v v v                                      ! "  ! #  ! $  ! %  ! &  ! '  ! (  ! )  ! *  ! +  ! ,  ! -  ! .  ! /  ! 0  ! 1  ! 2  ! 3  ! 4  ! 5  ! 6  ! 7  ! 8  ! 9  ! :  ! ;  ! <  ! =  ! >  ! ?  ! @  ! A  ! B  ! C  !.  ! D  ! E  ! F  ! G  ! H  ! H  ! I  ! J  ! J  ! K  ! L  ! L  ! M  ! N  ! N O P Q O P R O P S O T U O T V O T W O T X O T Y O T Z O T Z O T [ O T \ O T \ O T ] ^ _ ` a bt ct dt et;t ft gt ht it%t jt kt lt mt nt nt ot pt qt rt st tt ut vt wt xt yt zt {t |t }t ~t t t t t t t t t t t t t t t t t t t t t t  1                E                                                              vw           # #  $ $ $ $$ $$ $ $ $ $ $ $ $ $ $ $>$>$ $ $ $$ $ $ $ $ $ $ $+$ $ $,$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.$ $ $ $ $ !$1$ "& #& $& %& &(U( '( (( )( *( +( ,( -( .( /( 0( 1( 2( 3( 4( 5( 6) ) ) ) 7)) )3) 8) ),)-).) ) ) ) !) ) ) ) ) ) ) ) 9) ) ) )1) :) ") ) ) , ;, <- =- >. ?. ?. @. A. B. C. D. E1 F1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O2 P2 Q2 R2 S2 T2 U2 V2 W4 X4 X4 Y4 Z4 [4 \4 ]4 ^4 _4 `4 a4 b4 c4 d4 e4 f4 g4 h4 i4 j4 k4 l4 m4 n4 o4 p4 q4 r4 r4 s4 t4 u4 v4 w4 x4 y4 z4 {4 |4 }4 ~4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 u u u u u u u u u u u u u u u u u u 6_6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8g8z8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9z9 9 9 9 : : : : : : : : : : : : : : : : : :g:z: : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;g;z; ; ; ; ; < < < < < < < < < < < < < < < < < <g<z< < < < < = = = = = = = = = = = = = = = = = = = = = = > > > > > > > > > > > > > > > > > >>>?> >> > > > > v> > > > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A A A A A A A A A A A A A A A A A AgAzA A A A A A A A A AA A A B B B B B B B B B B B B B B B B B BzB B B B B C C C C C C C C C C C C C C C C C CgCzC C C C C C C C C D D D D D D D D D D D D D D D D D DgDzD D D D D D D D D D D D D D D D D D D D D D D D E E E E E E E E E E E E E E E E E EgEzE E E E F F F F F F F F F F F F F F F F F FgFzF F F F G G G G G G G G G G G G G G G G G GgGzG G G G G G G H H H H H H H H H H H H H H H H H HzHgH H H H H H K K K K K L L3L L L L L L L L L L L L L !L "L #L $L %L &L 'L (LM )M *M +M ,M -O .O /O 0S 1S 2S 3S 4S 5S 6S 7S 8S 9S :S ;S <S =S >S ?S @S AS BS CS DS ES FS FS GS HS IS JS KS LS MS NS OS PS QS RS SS TS US VS WS XS YS ZS [S \S ]S ^S _S `S aS bS cS dS eS fS gS hS iS jS kS lS mS nS oS pS qS rS sS tS uS vS wS xS yT zT {T |T }T ~T T T T T T T U U tU U U U U U U U V V V V V V X X X X X X X X Y v [ [ [ [ [ [ [ [ [ ]] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ` ` ` `.` ` ` aahaaraaa a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b bb b b b bbb b b b b c d d d d d d d d d d d d d !d "d #d $d %d &d 'd (d )f>f>f *f +f ,f -f .f /f 0f 1f 2f 2f 3f f f+f,f 4f 5f 6f0f 7f.f 8f 9f :f ;f <f =f >f ?f/f @f Af Bf Cf Df Ef Fg Gg Hg Ig Jh Kh Lh Mh Nh Oh Ph Qh Rh Sh Thhh Uh Vh Wh Xh Yh Zh [% \% ] ^ yi-0.6.2.4 Yi.Prelude Yi.DynamicYi.MonadYi.Char.UnicodeYi.Keymap.CompletionYi.IncrementalParseYi.Debug Yi.StringYiYi.UI.Pango.Gnome Yi.UI.Common Yi.EditorYi.EventYi.StyleYi.Style.LibraryYi.Buffer.BasicYi.Regex Yi.KillRing 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.Config Yi.UI.Batch Yi.UI.Utils Yi.UI.TabBar Yi.Process Yi.UI.PangoYi.Boot Yi.TemplatesYi.Keymap.KeysYi.CoreYi.UI.Pango.ControlYi.File Yi.HoogleYi.Mode.Buffers Yi.CompletionYi.TextCompletion Yi.IReader Yi.History Yi.Search Yi.MiniBufferYi.MiscYi.DiredYi.Eval Yi.Lexer.AlexYi.Lexer.AbellaYi.Lexer.CabalYi.Lexer.Compilation Yi.Lexer.CYi.Lexer.ObjectiveCYi.Lexer.CplusplusYi.Lexer.HaskellYi.Lexer.JavaScriptYi.Lexer.LatexYi.Lexer.LiterateHaskellYi.Lexer.GNUMakeYi.Lexer.OCaml Yi.Lexer.Ott Yi.Lexer.PerlYi.Lexer.Python 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.MainShim.ProjectContent Data.TrieParser.IncrementalSystem.FriendlyPath Shim.UtilsShim.CabalInfoData.DelayListPaths_yiYi.UI.Pango.Utils Data.RopeData.PrototypeYi.Buffer.ImplementationYi.UI.Pango.ProjectTreebaseGHC.Base++ghc-primGHC.Primseq System.IOprint Data.TuplefstsndGHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negatefail>>=>>returnBoundedEnumEq FractionalIntegralMonadFunctorNumOrdGHC.ReadReadRealRealFrac Data.TypeableTypeable GHC.TypesCharDouble integer-gmpGHC.Integer.TypeIntegerIO Data.EitherEitherStringLeftRightmaxmin Data.MaybeMaybeNothing Text.Readread writeFileputStrLn Data.ListunlinesreadList readsPrec fromIntegral toRational toIntegerdivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionGHC.Err undefined Control.Monadwhen=<<signumabs*+GHC.Listlookup replicatenullinitlasttailheadJustmaxBoundminBoundfromEnumtoEnumpredsucc<$fmap/=<=><comparemonads-fd-0.1.0.2Control.Monad.State.Classgetstransformers-0.2.2.0Control.Monad.Trans.ReaderReaderT runReaderTgreeksymbols checkAmbsdisamb subscripts superscriptsCompletionTreeCT listToTreestepTreeobvious mergeTreescompleteParserEnterYuckLooksymboleoftestNextlookNext recoverWith initDebugtraceerror logPutStrLnlogError logStreamtraceMtraceM_ capitalizecapitalizeFirstchomp dropSpaceisBlankfillTextunlines'lines'mapLinesonLinespadLeftpadRightRefreadRefwriteRef modifyRef getsAndModify modifiesRefreadsRef writesRefmodifiesThenReadsRefwithwhenMmaybeM repeatUntilMgetsARopereversetoReverseStringtoString fromStringemptylength countNewLinesappendtakedropsplitAtsplitAtChunkBefore splitAtLinereadFileProto fromProto extractValueoverride.->watchSystemFontUIEditorSemiNum+~-~~-Endom<>iofst3snd3trd3 singletondiscardlistnubSet mapAdjust' mapAlter'groupBy'every commonPrefixputAgetAmodAEventKeyKTabKEnterKRightKDownKLeftKMenuKUpKNP5 KPageDownKEndKDelKPageUpKHomeKInsKBSKASCIIKPauseKPrtScrKFunKEscModifierMSuperMMetaMCtrlMShift prettyEvent eventToCharColorDefaultRGB StyleNameUIStylemodelineAttributesmodelineFocusStyletabBarAttributestabInFocusStyletabNotFocusedStylebaseAttributes selectedStyleeofStyle errorStyle hintStylestrongHintStyle commentStyleblockCommentStyle keywordStyle numberStylepreprocessorStyle stringStylelongStringStyle typeStyledataConstructorStyle importStyle builtinStyle regexStyle variableStyle operatorStyle quoteStylemakeFileActionmakeFileRuleHeadStyle Attributes foreground background reverseAttrbolditalic underlineemptyAttributeswithFgwithBgwithBdwithItlc withUnderline defaultStyle colorToTextblackgrey lightGreydarkredred darkgreengreenbrownyellowdarkbluebluepurplemagentadarkcyancyanwhite brightwhiteTheme defaultThemedefaultLightTheme darkBlueTheme happyDeluxe textExMachina DirectionForwardBackwardSizefromSizePoint fromPoint BufferRefMarkmarkId reverseDir mayReverse directionElim SearchOption QuoteRegex NoNewLine IgnoreCase SearchExpseInput seCompiledseBackCompiled searchString searchRegexmakeSearchOptsMregexEscapeString emptySearch emptyRegexKillringkrKilled krContentskrEmptykrEndCmdkrPutkrSetkrGet DynamicValuesDynamic InitializableinitialtoDyn fromDynamic dynamicValueAemptyDVRegionregionDirection regionStart regionEnd regionFirst regionLast fmapRegion regionSizeintersectRegion unionRegionmkRegion mkRegion' mkSizeRegion emptyRegioninRegion nearRegionincludedRegion regionIsEmptyregionsOverlapWindowisMinibufkey bufAccessListheight winRegionwkey WindowRefwinkeydummyWindowKey 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 idAutomatonextractTopKeymap emptyAction KeymapSet KeymapProcess KeymapEndoKeymapKeymapMInteractActionMarkSetfromMarkinsMarkselMarkWinMarksBufferIdBufferM fromBufferMIndentBehaviour DecreaseOnly IncreaseOnly DecreaseCycle IncreaseCycleModemodeName modeAppliesmodeHL modePrettify modeKeymap modeIndentmodeAdjustBlock modeFollowmodeIndentSettingsmodeToggleCommentSelectionmodeGetStrokesmodeGetAnnotations modePrintTree modeOnLoadAnyModeIndentSettings expandTabstabSize shiftWidthFBufferbmodeshortIdentString identStringminiIdentStringidentA clearSyntaxlastActiveWindowA lastSyncTimeAundosA readOnlyA insertingApointFollowsWindowAfilependingUpdatesAhighlightSelectionArectangleSelectionAkeymapProcessA getModeLine getPercent addOverlayB delOverlayBdelOverlayLayerB runBuffergetMarks runBufferFull getMarkValueBnewMarkB deleteMarkBrunBufferDummyWindow markSavedBbkeyisUnchangedBufferundoBredoBmodeAlwaysAppliesmodeNeverApplies emptyModenewBsizeBpointBnelemsBstreamBindexedStreamBstrokesRangesBmoveTo setInsertingrevertPendingUpdatesBwriteBwriteNnewlineB insertNAtinsertNinsertB deleteNAtcurLn markLinesgotoLnsetMode0 setAnyModesetMode modifyModeonMode withMode0 withModeB withSyntaxB focusSyntax withSyntaxB' regexRegionBregexB setMarkPointB modifyMarkBsetVisibleSelectionaskMarksgetMarkB mayGetMarkBmoveNleftBleftNrightBrightN setPrefCol lineMoveRelmovingToPrefCol moveToColBmoveToLineColBpointOfLineColBforgetPreferCollineUplineDownelemsBreadBreadAtBdeleteNcurColcolOflineOf solPointB gotoLnFrombufferDynamicValueAsavingExcursionB getMarkPointB savingPointBpointAt askWindow winRegionB deleteRegionB readRegionBreplaceRegionBreplaceRegionClever 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 regionStyleAmkRegionOfStyleBunitWiseRegionextendRegionToBoundariesBufferFileInfobufInfoFileName 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 vimScrollByBscrollToCursorBscrollCursorToTopBscrollCursorToBottomBscrollBsnapInsBindexOfSolAbove snapScreenB downFromTosB upFromBosBmiddleBpointInWindowBgetRawestSelectRegionBgetRawSelectRegionBgetSelectRegionBsetSelectRegionBextendSelectRegionBdeleteBlankLinesB lineStreamBgetMaybeNextLineB getNextLineBgetNextLineWhichBgetNextNonBlankLineBmodifySelectionBmodifyExtendedSelectionBlinePrefixSelectionBunLineCommentSelectionBtoggleCommentSelectionBjustifySelectionWithTopBreplaceBufferContent fillRegion fillParagraph sortLinesrevertBtabBindentSettingsB autoIndentBautoIndentHelperB cycleIndentsBfetchPreviousIndentsBautoIndentWithKeywordsBlastOpenBracketHint keywordHintskeywordAfterHints indentOfB spacingOfB indentToBindentAsPreviousBnewlineAndIndentB rePadString indentStringshiftIndentOfRegiondeleteIndentOfRegionindentOfCurrentPosBUIBootConfig startFrontEndconfigUI startActionsinitialActions defaultKmconfigInputPreprocess modeTablepublishedActions debugModeconfigRegionStyleconfigKillringAccumulatebufferUpdateHandlerUIConfigconfigVtyEscDelayconfigFontNameconfigFontSizeconfigLeftSideScrollBarconfigAutoHideScrollBarconfigAutoHideTabBarconfigLineWrapconfigWindowFill configTheme configStyleconfigFundamentalModeconfigTopLevelKeymap MonadEditoraskCfg withEditorEditorM fromEditorM bufferStackbuffers refSupplytabs_dynamic statusLinesmaxStatusHeightkillring currentRegexsearchDirection pendingEventsonCloseActionsStatusesStatus liftEditor emptyEditor runEditorTempBufferNameHint tmp_name_basetmp_name_index bufferStackAbuffersA refSupplyAtabs_AdynamicA statusLinesAmaxStatusHeightA killringA currentRegexAsearchDirectionApendingEventsAonCloseActionsAwindowswindowsAtabsAdynAnewRef newBufRefstringToNewBuffer insertBuffer forceFold1 forceFold2 deleteBuffer bufferSetcommonNamePrefixgetBufferStack findBufferfindBufferWithfindBufferWithNamegetBufferWithNameopenAllBuffersE shiftBufferwithGivenBuffer0withGivenBufferAndWindow0 withBuffer0currentWindowA currentBufferprintMsg printMsgs printStatus setStatus clrStatus statusLinestatusLineInfo setTmpStatussetRegEgetRegE getDynamic setDynamicnextBufWprevBufW newBufferEnewTempBufferEalternateBufferE newWindowEswitchToBufferEswitchToBufferOtherWindowEswitchToBufferWithNameE closeBufferEgetBufferWithNameOrCurrentcloseBufferAndWindowEnextWinEprevWinEfixCurrentBufferA_fixCurrentWindow withWindowEfindWindowWithwindowsOnBufferE focusWindowEsplitE enlargeWinE shrinkWinEnewTabEnextTabE previousTabEmoveTab deleteTabE tryCloseE closeOtherEshiftOtherWindowwithOtherWindowacceptedInputsonCloseBufferEmainendsuspendrefreshuserForceRefreshlayout reloadProjectdummyUIstartindexedAnnotatedStreamB applyHeights spliceAnnots strokePicture paintStrokes paintPictureattributesPictureBattributesPictureAndSelB arrangeItems arrangeItems' TabBarDescrTabDescrtabText tabInFocus tabBarDescrtabAbbrevTitleSubprocessInfoprocCmdprocArgs procHandlehInhOuthErrbufRefseparateStdErr SubprocessIdpopenrunProgCommand shellFileNamerunShellCommandcreateSubprocess readAvailable topKeymapstartInsertKeymap insertKeymapstartTopKeymapYiAction makeActionYiMrunYiMYiVaryiEditorthreadsyiSubprocessIdSupplyyiSubprocessesyiUiinputoutputyiConfigyiVarTaggedABufferAEditorAYiAwithUIunsafeWithEditorwithGivenBuffer withBuffer readEditor catchDynE catchJustE handleJustEshutdown topKeymapAstartInsertKeymapA insertKeymapAstartTopKeymapAmodelessKeymapSet processEventreload addTemplate templates templateNameslookupTemplate printableCharpStringcharOfshiftctrlmetasupercharctrlChmetaChoptModspec>>!>>=!?>>?>>!?*>>?*>>! startEditor quitEditorfocusAllSyntax refreshEditor suspendEditorrunProcessWithInput runAction msgEditor errorEditor closeWindowstartSubprocess sendToProcess withSyntaxIter iterFBufRefpointView viewFBufRef windowRefdrawArealanguagemetrics scrollWinshownToswinMotionSignalBufferfBufRefControlM runControl''Control controlYitabCacheviews controlIO getControlliftYi startControl runControl newBuffernewView setBufferMode getBuffersetTextgetTextrevertEviWrite viWriteTo viSafeWriteTofwriteE fwriteBufferE fwriteToE fwriteAllEbackupE setFileName caseSensitizegv hoogleRawhoogleFunctionshoogleFunModulehoogle hoogleSearch listBuffers mkIsPrefixOf prefixMatch infixMatchcontainsMatch' containsMatchcontainsMatchCaseInsensitivecompleteInListcompleteInList' resetCompletemkWordCompletewordCompleteString'wordCompleteString wordComplete' wordComplete completeWordB ArticleDBArticlesplitgetLatestArticle removeSetLast insertArticlewriteDBreadDB dbLocationoldDbNewArticlegetBufferContentssetDisplayedArticle nextArticledeleteAndNextArticlesaveAndNextArticlesaveAsNewArticleHistory_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 findFileHintfnewEdireddiredDirdiredDirBufferexecEditorActiongetAllNamesInScopejumpToE jumpToErrorE consoleKeymapASIPosnposnOfsposnLineposnColToktokTtokLentokPosn AlexStatestLexer lookedOffsetstPosn AlexInput tokToSpantokFromTtokBegintokEnd tokRegion startPosnmoveStr alexGetCharalexCollectCharalexInputPrevChar 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 svnCommitMode ocamlModeperlMode pythonMode gnuMakeModeottModewhitespaceMode anyExtensionextensionOrContentsMatch hookModesapplyModeHooks lookupModemode atLastLineghciHome interactIdinteractHistoryMoveinteractHistoryFinishinteractHistoryStartgetInputRegiongetInputsetInput interactive feedCommand queryReply CabalBuffer cabalBufferchangeBufferNameE shellCommandE shellCommandVcabalConfigureE configureExitreloadProjectEbuildRun makeBuildcabalRun cabalBuildEshell searchSourcesgrepFindinsertTemplateVimExCmdcmdNamescmdFn completeFnVimOptstildeopcompleteCaseSensitiveenableTagStack listTagStack pushTagStack peekTagStack popTagStackModeMap v_top_level v_ins_charv_opts v_ex_cmds savingInsertBsavingInsertCharBsavingInsertStringB savingDeleteBsavingDeleteCharBsavingDeleteWordBsavingCommandYsavingCommandEmkKeymap keymapSetnilCmdexCmdexCmdsexSimpleCompleteexInfixComplete'exInfixCompletemkExHistCompleteexHistComplete'exHistCompleteexHistInfixComplete'exHistInfixComplete defKeymapleave 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 latexMode3 SupertabExtSupertab MkSnippetCmd mkSnippetCmdDependentMarksmarks BufferMarks bufferMarksMarkInfoDependentMarkInfoValuedMarkInfoendMarkSimpleMarkInfo userIndex startMark SnippetMark DependentMark ValuedMark SimpleMark SnippetCmdtext&&> runSnippetupdateUpdatedMarksfindEditedMarksdependentSiblingsupdateDependentsupdateDependents'markText setMarkTextfindOverlappingMarksWithfindOverlappingMarksregionsOverlappingMarksoverlappingMarksallOverlappingMarksdependentOverlappingMarksnextBufferMarkmoveToNextBufferMarksuperTab fromSnippets hsFunctionhsClass layoutHandlerExpPInPLetDCTCPGuard'PGuardContextModidOptRHSPErrorerrorTokmarker commentListPWherePAtomPClasscKeywordcHeadcwherePData'dataConsPData dataKeyword dtypeConsdEqualdataRhsPType typeKeywordtypeConsequalbtypeTSPImport importKeywordqualname'as specification PModuleDecl moduleKeywordexports whereKeywordBodyimportscontent extraContentProgModmodDeclbodyPModulecommentsprogMod indentScannerisBrace ignoredTokengetIndentingSubtreegetSubtreeSpanparse' cleverMode literateMode preciseModeghciGetghciSendghciLoadBuffer ghciInferType QueuedUpdate qUpdatePointqInsertqDelete dollarifydollarifyWithinrunQ openParen closeParen isNormalParenisTuple queueDeletequeueReplaceWith stripComments dollarifyTop dollarifyExprisSimple isCollapsible selectedTreefindLargestWithinwithinsafeLast dollarifyPdollarifyWithinPisNormalParenPisTuplePstripCommentsP dollarifyTopPdollarifyExprP isSimplePisCollapsibleP selectedTreePfindLargestWithinPwithinP safeLastPavailableFrontends defaultConfigdefaultEmacsConfigdefaultVimConfigdefaultCuaConfigtoEmacsStyleConfigtoVimStyleConfigtoCuaStyleConfigyiDriveryi ModuleKind HiddenModule ExposedModule FolderKind PlainFolderHsSourceFolderFileKind LicenseText SetupScriptTextFileHSourceCSourceHsSource ProjectItem ModuleItem modItemName moduleKind PackageItem pkgItemNameFileItem fileItemName itemFPathfileKind FolderItemfolderItemName folderKindDependenciesItem depItemName projItemName itemVersionitemNamegetTop insertDownupmodify' addSourceDir addFilePath addFilePath' findModules findFirstFile greekData zipscriptsTrieinsertfromListtoList lookupPrefix liftMaybe forcedNextpossibleSuffixes certainSuffixshow' compareBy mergeTrees'ProcessZipRPolishRStopRAppRPushLogEntryLSLSuspLFailLDoneLShiftLDislikeLEmptyLLogProfile:>PResPFailPSuspStepsFailLogDislikeBestSusSh'ShiftDoneAppValDisjEmptShifBindApplPure:<top_restfirstsecond***mapSuccdislikeThresholdbetter+>rightLogprofile countWidthapplyevalR'toQtoPiBestfeedfeedZevalLevalL'pushSymspushEof mkProcessrunevalRPsimplifyevalRfullLogonRightcanonicalizePathFix makeAbsoluteuserToCanonPath recoverTildacanonicalizePath' expandTilda isAbsolute' dbgHandlelogStreamThreadprocessGetContents recurseDirsafeHeadsplitBy splitElemunSplitrevDropequating dropPrefix dropSuffix netEncode netDecode getNetstring skipWhite readCharN hexEncode hexDecodelogfile logAction setLogAction setLogfile getLogfilelogSunlessMshortenuncurry3guessCabalFileguessCabalStanzafindPackageDesc DelayList-?decreaseversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNamelinesloadIconmodifyfromRopeIndices charIndex lineIndexChunk chunkSize fromChunkdefaultChunkSizemkChunk-||-newlinetoLazyByteStringfromLazyByteString splitAtLine' cutExcessmonospaceFontKeywatchchainzipWithT otherwiseGHC.ShowShowControl.Applicative Applicative Data.FoldableFoldableData.Traversable TraversableGHC.BoolBoolIntGHC.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.FunctiononfixControl.Category>>><<<.idCategory Data.Functor<$> Text.Show showListWith showParen showStringshowCharshowsShowSshowListshow showsPrec$flipconstnot||&&data-accessor-0.2.1.4 Data.Accessor<.setValgetValaccessorAccessorData.Accessor.Basic^:^.^=data-accessor-monads-fd-0.2.0.2Data.Accessor.Monad.FD.State%:%= remapChar ctrlLowcasesetMetametaBit withReverse searchOptmapLeftliteralPatternliteralPattern'reversePatternregex-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.4Text.Regex.TDFA=~~=~getVersion_Text_Regex_TDFAText.Regex.TDFA.CommonlastStarGreedy newSyntax rightAssoc multiline caseSensitive CompOption captureGroups ExecOptionRegex krAccumulate krLastYankmaxDepthpush ordRegion BufferImpl FBufferDatamem markNameshlCacheoverlays dirtyOffset overlayLayer overlayBegin overlayEnd overlayStyleHLStateMarks dummyHlState updateString updateSizenewBI readChunk insertChars deleteCharsshiftMarkValue mapOvlMarkssizeBInelemsBI getStreamgetIndexedStream overlayUpdate addOverlayBI delOverlayBIdelOverlayLayerstrokesRangesBI isValidUpdate applyUpdateIreverseUpdateIlineAtsolPoint solPoint'charsFromSolBI regexRegionBI newMarkBIgetMarkValueBIdeleteMarkValueBI getMarkBI modifyMarkBI setSyntaxBI touchSyntax updateSyntaxgetMarkDefaultPosBIgetAstfocusAstSavedFilePointundoInteractiveremIPaddIPundoUntilInteractiveasRedoPriorWriteGetPlusPriorityWritesFailsGetsBindsReturns pushEvent findWrites pullWritesidentbkey__undos bufferDynamic preferColpendingUpdatesselectionStyleprocesswinMarkslastActiveWindow lastSyncTimereadOnly insertingpointFollowsWindowSelectionStylehighlightSelectionrectangleSelectionrawbuf attributesidentAAbkey__AAundosAAbufferDynamicAA preferColAApendingUpdatesAAselectionStyleAA processAA winMarksAAlastActiveWindowAAlastSyncTimeAA readOnlyAA insertingAApointFollowsWindowAA modifyRawbufqueryAndModifyRawbufattrsA preferColAbufferDynamicAselectionStyleA winMarksA queryBuffer modifyBufferqueryAndModifyundoRedoconst2epochcheckRO applyUpdate modifyMode0 withSyntax0 getInsMark savingPrefColcolMove replToModGenUnit genBoundaryisNlisEndOfSentencechecksatViWordBoundaryatAnyViWordBoundaryatViWordBoundaryOnLineviWordCharTypeviWORDCharType atSepBoundary atBoundary enclosingUnitdoUntilB indexAfterBshellCommandSwitch read_chunkwrite'WinInfocoreWinrenderer winLayout winMetricstextviewmodelinewidgetTabInfocoreTabpage windowCacheuiWindow uiNotebook uiStatusbar uiActionChuiConfiguiFontmkUI updateFont askBuffer startNoMsg gtkToYiEventkeyTablesyncTabssyncTab syncWindows setTabFocusupdatesetWindowFocus removeTab removeWindow getWinInfo handleClick handleScroll handleMovehandleConfigurenewTab newWindowinsertTabBefore insertTabinsertWindowBeforeinsertWindowAtEnd insertWindow updateCacherenderdoLayoutgetHeightsInTab shownRegion updatePangomkColTemplateLookup TemplateNameTemplatehaskellTemplates recoverMode postActions showErrorsdispatchshowEvscheckFileChangesclearAllSyntaxAndHideSelectionpureM msgEditor'onYiVarterminateSubprocessesstartSubprocessWatchersremoveSubprocessappendToBuffer pipeToBuffer waitForExit runControl' makeControl removeViewcontrolUnsafeWithEditorswitch bufferKeymap filterMatches isSingleton CompletionveryQuickCompleteWordwordsAndCurrentWordwordsForCompletionInBufferwordsForCompletionwords' charClassIsearchsearchAndRepRegion0makeSimpleSearch makeISearch isearchFunE isearchNext0 isearchNextiSearch isearchEndqrReplaceCurrentDocType typeGetPrompt PromptablegetPromptedValue getPrompt getMinibuffercompletionFunctiondoPrompt DiredOpState diredOpSucCnt diredOpForAllDiredOpDONoOp DOFeedbackDOChoiceDOInput DOCkOverwriteDOCheck DOConfirmDORemoveBufferDORename DOCopyDir DOCopyFile DORemoveDir DORemoveFile DRStringsDRFilesDRDatesDRSizesDRGroupsDROwnersDRLinksDRPermsundrs DiredState diredPath diredMarks diredEntriesdiredFilePoints diredNameCol diredCurrFile DiredEntry DiredNoInfoDiredNamedPipeDiredCharacterDeviceDiredBlockDevice DiredSocket DiredSymLinkDiredDir DiredFile DiredFileInfo permStringnumLinksownergrp sizeInBytesmodificationTimeStringfnewCanonicalizedbypassReadOnly filenameColOf diredKeymap diredRefreshinsertDiredLinelinesToDisplay diredScanDir scanForUid scanForGid modeStringshortCalendarTimeToString diredOmitFile diredMark diredMarkDeldiredMarkWithChardiredRefreshMark diredUnmarkdiredUnmarkPathdiredUnmarkAll currentDir diredDoDeldiredDoMarkedDel diredRename diredCopy diredLoadnoFileAtThisLine fileFromPoint markedFiles diredUpDirdiredCreateDirincDiredOpSucCntresetDiredOpStategetDiredOpStatemodDiredOpState procDiredOpaskRenameFiles askCopyFiles askDelFiles NamesCacheflattenExports flattenExport errorRegexparseErrorMessageparseErrorMessageBprompt takeCommandIcons icoProjecticoDependenciesicoPlainFoldericoHsSourceFoldericoExposedModuleicoHiddenModuleicoExposedFileModuleicoHiddenFileModule icoCSource icoHSource icoTextFileicoLicenseFile icoPackageicoSetupScriptprojectTreeNewloadProjectTree IndexedStrmoveCh AlexAccPredAlexAccAlexAccSkipPred AlexAccSkip AlexLastAcc AlexLastSkipAlexNone AlexReturn AlexTokenAlexSkip AlexErrorAlexEOFAlexAddrAlexA# alex_base alex_table alex_check alex_deflt stateToInitnestcommStartbuiltinConstructorsopToOpresToReshtmlcomm multicomm LaTeXBlock CommentBlock unCommentCodeLine CodeBlock codeBlockcodeLine RuleCommandComplexExpansionIncludeDirective InCommentTopLevelcomplexExpansionincludeDirective ruleCommandbeginHombindspechomsplice HlInVariableHlInSubstRegex HlInPerldoc HlInHeredocHlInInterpHeredocNoIdentHlInInterpHeredocHlCollectHeredocIdentHlStartCollectHeredocIdent HlInStringHlInInterpStringHlInCodecollectHeredocIdentheredoc interpHeredocinterpHeredocNoIdent interpStringperldocstartCollectHeredocIdentstringvariableHlCommitSummaryHlCommitMessage commitSummary spaceStyletabStyle TagsFileListTags readCTagsNodepruneNodesBefore firstThatlastThatfromLeafAfterToFinalallLeavesRelativeallLeavesRelative'nodesAndChildIndex nodesOnPath beforeChild afterChildallLeavesRelativeChild allLeavesIn getAllPathsgoDownindexwalkDownwkDown nullSubtree getFirstTok getLastTok MaybeOneMoreOneMoreNone manyToks'subTreeStyleBasedMode isMakefileextensionMatches ViInsertionViIns viActFirst viActBefore viBeginPosviEndPos viActAfterViCmdNoOpArbCmdViMoveNoMoveSeqMove ReplicateArbMovePercentageFileCharMoveGenMove MaybeMoveMoveVimMode VimTagStack tagsStack VimExCmdMap viActFirstA viActBeforeA viBeginPosA viEndPosA viActAfterA getTagStack setTagStacktildeopAcompleteCaseSensitiveAenableTagStackA v_top_levelA v_ins_charAv_optsA v_ex_cmdsAlastViCommandAcurrentViInsertionA applyViCmdregionOfViMove applyOperator emptyViInsgetViIns viInsTextviCommandOfViInsertioncommitLastInsertionEsavingCommandE'YsavingCommandEYsavingCommandBsavingCommandB'savingCommandB'YviMoveviReplicateMovemovePercentageFile ignoreExCmdviWriteModifiedviFnewEviSearchviSubins_mode withBuffer0' withBuffer' withEditor' percentMove jumpToMarksetMark setMarkHere getViMarkB mayGetViMarkBvalidMarkIdentifierkwd_modegetModifiedBuffers deservesSave isFileBufferaskIndividualSaveselfSearchKeymap searchKeymapdigittt maybeListgotoTag visitTagTable resetTagTableselfInsertKeymap unsetMark replaceSel deleteSelmoveKeysmoveselectrectother completionKm placeMark selectAlldeleteB' emacsKeys AbellaBuffer _abellaBuffer abellaModeGengetProofPointMarkgetTheoremPointMark abellaNext abellaAbort$fStrokableStatement dropWhileJSBufferjavaScriptAbstractjsSimpleIndentjsLexer jsCompile getJSBuffer mkJSBufferjsErrors latexLexercursor cursorWithdepisDependentMark bufferMarkersmkMarkwithSimpleRegion markRegionsafeMarkRegion adjMarkRegionisDependentMarkersafeDeleteMarkBsnippetIState BlockOpenIndentisParenmaxPosnpModulepModBodypEmptyBLpBody noImportspVarIdpQvaridpQvarsym isOperatorpQtyconpVarsnextLine startBlockendBlockpEmptypToListsymexactpleasepErrppConspKWpOPppOP pCommentspOptpAtomppAtom recoverAtompCAtompSepBy pParenSeppComma pModuleDeclpExportpTestTokpImportspImportpTypepDatapGadtpDataRHS pDerivingpAtypepAtype'pContextpForAllpConstrspConstrstrictFpEModulepLetpDopLambdapOfpClasspGuardpFunRHSpWherepDeclpEqpManypBlockspBlockOfpBlock pBlockOf'pTopDeclpExprpExprOrPatternpElem pTypeElem isNoiseErr isNotNoisepCParenpCBracepCBrackpParenpBracepBrack getStrokeMod getStrokeImpgetStrtspStyle paintAtomisErrisErrNerrStylecomtk'tkTConsttkDConsttkImporterrTok GhciBuffer _ghciBufferhaskellAbstract haskellLexerliterateHaskellLexer adjustBlock insideGroupcleverAutoIndentHaskellBcleverAutoIndentHaskellCcolOf' nominalIndenttokText isLineComment contiguouscoalescecleverPrettifytokTypautoIndentHaskellBghcighciInferTypeOfvtyscrsizeuiThreaduiEnd uiRefreshuiEditorconfigoAttrsRenderedpicture fromVtyEvent fromVtyKey fromVtyMod layoutAction renderTabBar hasTabBarscanrT getRegionImpl renderWindow drawWindowdrawTextwithAttributescomputeHeightsgetY colorToAttrattributesToAttr paintCharslazystysdefaultPublishedActions escToMetaopenScratchBuffer nilKeymapOptsDebug SelfCheck ConfigFileFrontendFileEditorNmLineNoVersionHelp frontendNameseditorsoptionsusageversinfodo_args getConfigrealMainshowErrorsInConf