{-# LANGUAGE OverloadedStrings #-} -- | -- Module : Yi.Keymap.Vim.Ex.Commands.BufferNew -- License : GPL-2 -- Maintainer : yi-devel@googlegroups.com -- Stability : experimental -- Portability : portable module Yi.Keymap.Vim.Ex.Commands.BufferNew (parse) where import Control.Applicative (Alternative(..)) import Control.Monad (void) import qualified Data.Attoparsec.Text as P (anyChar, char, string) import Data.List (null) import qualified Data.Text as T (pack) import Yi.Buffer (BufferId (MemBuffer)) import Yi.Editor (newEmptyBufferE, newTempBufferE, switchToBufferE) import Yi.Keymap (Action (EditorA)) import Yi.Keymap.Vim.Common (EventString) import qualified Yi.Keymap.Vim.Ex.Commands.Common as Common (parse, pureExCommand) import Yi.Keymap.Vim.Ex.Types (ExCommand (cmdAction, cmdShow)) parse :: EventString -> Maybe ExCommand parse = Common.parse $ do void $ P.string "new" n <- (some (P.char ' ') *> many (P.anyChar)) <|> ("" <$ many (P.char ' ')) return $ Common.pureExCommand { cmdShow = "new" , cmdAction = EditorA $ do b <- if null n then newTempBufferE else newEmptyBufferE (MemBuffer $ T.pack n) switchToBufferE b }