-- Copyright (c) Jean-Philippe Bernardy 2008 module Yi.Mode.Compilation where import Control.Monad import Control.Lens import Yi.Core import Yi.File (editFile) import Yi.Lexer.Alex (Tok(..), Posn(..)) import Yi.Style import Yi.Modes (linearSyntaxMode) import qualified Yi.Lexer.Compilation as Compilation import qualified Yi.Syntax.OnlineTree as OnlineTree mode :: Mode (OnlineTree.Tree (Tok Compilation.Token)) mode = (linearSyntaxMode Compilation.initState Compilation.alexScanToken tokenToStyle) { modeApplies = modeNeverApplies, modeName = "compilation", modeKeymap = topKeymapA %~ ((spec KEnter ?>>! withSyntax modeFollow) <||), modeFollow = YiA . follow } where tokenToStyle _ = commentStyle follow errs = do point <- withBuffer pointB case OnlineTree.tokAtOrBefore point errs of Just (t@Tok {tokT = Compilation.Report filename line col _message}) -> do withBuffer $ moveTo $ posnOfs $ tokPosn t shiftOtherWindow void $ editFile filename withBuffer $ do void $ gotoLn line rightN col _ -> return ()