yi-0.4: Yi/Mode/Compilation.hs
module Yi.Mode.Compilation where
import Prelude ()
import Yi.Buffer
import Yi.Core
import Yi.Lexer.Alex (Tok(..), Posn(..))
import Yi.Prelude
import Yi.Style
import Yi.Syntax
import Yi.Dired
import Yi.Editor
import Yi.Keymap
import qualified Yi.Lexer.Alex as Alex
import qualified Yi.Lexer.Compilation as Compilation
import qualified Yi.Syntax.Linear as Linear
import Yi.Keymap.Keys
compilationMode :: Mode (Linear.Result (Tok Compilation.Token))
compilationMode = emptyMode
{
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.tokBefore point errs of
Just (Tok {tokT = Compilation.Report filename line col _message}) -> do
shiftOtherWindow
fnewE filename
withBuffer $ do
gotoLn line
rightN col
_ -> return ()