module Yi.Config.Users.Reiner (setup, main) where
import Control.Lens
import Data.Monoid
import qualified Data.Text as T
import System.Directory
import System.FilePath
import Yi.Command(buildRun)
import Yi.Config.Simple
import qualified Yi.Mode.Haskell as Haskell
import Yi.Mode.Latex(latexMode3)
import Yi.Monad
import qualified Yi.Rope as R
import Yi.Utils
main :: IO ()
main = configMain defaultEmacsConfig setup
setup :: ConfigM ()
setup = do
setFrontendPreferences ["pango", "vte", "vty"]
fontSize .= Just 9
globalBindKeys globalBindings
evaluator .= publishedActionsEvaluator
publishAction "createDirectory" yiCreateDirectory
addMode Haskell.fastMode
modeBindKeys Haskell.fastMode
(ctrlCh 'c' ?>> ctrlCh 's' ?>>! insertHaskSection)
addMode latexMode3
publishAction "compileLatex" compileLatex
modeBindKeys latexMode3 (ctrlCh 'c' ?>> ctrlCh 'c' ?>>! compileLatex)
yiCreateDirectory :: YiM ()
yiCreateDirectory = do
BufferFileInfo{bufInfoFileName} <- withEditor $ withCurrentBuffer bufInfoB
let dir = takeDirectory bufInfoFileName
exists <- io $ doesDirectoryExist dir
if not exists
then do io $ createDirectoryIfMissing True dir
withEditor $ printMsg $ "Created directory '" <> T.pack dir <> "'."
else withEditor $ printMsg $ "Directory already exists!"
sectionSize :: Int
sectionSize = 80
insertHaskSection :: R.YiString -> BufferM ()
insertHaskSection s
| lenS >= sectionSize 6 = do
insertDashes lenS
newlineB
insertN s
newlineB
insertDashes lenS
| otherwise = do
insertDashes sectionSize
newlineB
insertN "--"
let nSpaces = sectionSize 4 lenS
nSpacesL = nSpaces `div` 2
nSpacesR = nSpaces nSpacesL
insertN $ repChar nSpacesL ' '
insertN s
insertN $ repChar nSpacesR ' '
insertN "--"
newlineB
insertDashes sectionSize
where lenS = R.length s
insertDashes n = insertN $ repChar n '-'
repChar n c = R.fromText . T.replicate n $ T.singleton c
globalBindings :: I Event Yi.Config.Simple.Action ()
globalBindings = choice
[ ctrlCh '\t' ?>>! nextWinE
, shift (ctrlCh '\t') ?>>! prevWinE
, metaCh 'r' ?>>! reload
]
compileLatex :: YiM ()
compileLatex = do
withEditor (withCurrentBuffer $ gets file) >>= \case
Just filename -> buildRun "pdflatex" ["--file-line-error"
, "--interaction=nonstopmode"
, T.pack filename
] (const $ return ())
Nothing -> return ()