packages feed

yi-0.5.0.1: Yi/Mode/Compilation.hs

module Yi.Mode.Compilation where

import Prelude ()
import Yi.Core
import Yi.Lexer.Alex (Tok(..), Posn(..))
import Yi.Style
import Yi.Syntax
import Yi.Dired
import qualified Yi.Lexer.Alex as Alex
import qualified Yi.Lexer.Compilation         as Compilation
import qualified Yi.Syntax.Linear as Linear

mode :: Mode (Linear.Result (Tok Compilation.Token))
mode = emptyMode
  { 
   modeApplies = const False,
   modeName = "compilation",
   modeKeymap = (<||) (spec KEnter ?>>! withSyntax modeFollow),
   modeFollow = \synTree -> YiA (follow synTree),
   modeHL = ExtHL $ mkHighlighter (Linear.incrScanner . Alex.lexScanner Compilation.alexScanToken Compilation.initState) 
                                  (\begin end pos -> Linear.getStrokes begin end pos . fmap tokenToStroke)
  }
    where tokenToStroke (Tok t len posn) = (posnOfs posn, tokenToStyle t, posnOfs posn +~ len)
          tokenToStyle _ = commentStyle
          follow :: Linear.Result (Tok Compilation.Token) -> YiM ()
          follow errs = do 
              point <- withBuffer pointB
              case Linear.tokAtOrBefore point errs of
                 Just (Tok {tokT = Compilation.Report filename line col _message}) -> do
                     shiftOtherWindow
                     fnewE filename
                     withBuffer $ do 
                         gotoLn line
                         rightN col
                 _ -> return ()