packages feed

manatee-editor 0.0.8 → 0.1.0

raw patch · 9 files changed

+233/−88 lines, 9 filesdep +binarydep +derivedep −gtk-serialized-eventdep ~manatee-coresetup-changedbinary-added

Dependencies added: binary, derive

Dependencies removed: gtk-serialized-event

Dependency ranges changed: manatee-core

Files

Main.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Editor.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Editor/PageMode.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Editor/SourceBuffer.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -17,18 +17,23 @@ -- along with this program.  If not, see <http://www.gnu.org/licenses/>.  {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE TemplateHaskell #-} module Manatee.Extension.Editor.SourceBuffer where  import Control.Applicative import Control.Concurrent.STM  import DBus.Client hiding (Signal)+import Data.Binary+import Data.DeriveTH import Data.List  import Data.Maybe import Data.Typeable import Graphics.UI.Gtk.Multiline.TextBuffer+import Manatee.Core.Config import Manatee.Core.PageMode import Manatee.Core.Types import Manatee.Extension.Editor.PageMode+import Manatee.Toolkit.General.STM import Text.Regex.TDFA  import qualified Data.ByteString as BS@@ -40,9 +45,20 @@                  ,sourceBufferPageId            :: PageId                  ,sourceBufferMode              :: PageMode                  ,sourceBufferBuffer            :: SB.SourceBuffer+                 ,sourceBufferState             :: TVar SourceState                  }      deriving Typeable +data SourceState =+    SourceState {sourceStateCursor              :: Maybe (Int, Int)+                ,sourceStateScrolledPosition    :: (Double, Double)+                } deriving Show++-- | Init state.+sourceInitState :: SourceState+sourceInitState =+    SourceState (Just (1, 0)) (0, 0)+ -- | New source buffer. sourceBufferNew :: String -> [String] -> Client -> PageId -> CustomizeWrap -> IO SourceBuffer sourceBufferNew path _ client pageId _ = do@@ -55,3 +71,18 @@                <*> pure pageId                <*> pure (fromMaybe defaultMode $ find (\x -> path =~ pageModeRegexp x) sourceModeList)                <*> pure buffer+               <*> newTVarIO sourceInitState++-- | Write state.+sourceBufferWriteState :: SourceBuffer -> FilePath -> IO ()+sourceBufferWriteState buffer path = do+  state <- readTVarIO $ sourceBufferState buffer+  writeConfigPath path state++-- | Read state.+sourceBufferReadState :: SourceBuffer -> FilePath -> IO ()  +sourceBufferReadState buffer path = do+  state <- readConfigPath path sourceInitState+  writeTVarIO (sourceBufferState buffer) state+  +$(derive makeBinary ''SourceState)
Manatee/Extension/Editor/SourceView.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -27,9 +27,9 @@ import Data.Text.Lazy (Text) import Data.Typeable import Graphics.UI.Gtk hiding (Statusbar, statusbarNew, get)-import Graphics.UI.Gtk.Gdk.SerializedEvent import Graphics.UI.Gtk.SourceView.SourceLanguage import Graphics.UI.Gtk.SourceView.SourceLanguageManager+import Manatee.Core.Config import Manatee.Core.DBus import Manatee.Core.PageFrame import Manatee.Core.PageView@@ -63,21 +63,28 @@     pageBufferCreateView a pId  = PageViewWrap <$> sourceViewNew a pId     pageBufferMode              = sourceBufferMode     pageBufferPackageName _     = fmap takeFileName getDataDir+    pageBufferWriteState        = sourceBufferWriteState+    pageBufferReadState         = sourceBufferReadState  instance PageView SourceView where-    pageViewBuffer              = PageBufferWrap . sourceViewBuffer-    pageViewPlugId              = sourceViewPlugId-    pageViewBox                 = pageFrameBox . sourceViewFrame-    pageViewScrolledWindow      = sourceViewScrolledWindow-    pageViewFocus               = widgetGrabFocus . sourceViewView-    pageViewCut                 = sourceViewCut-    pageViewCopy                = sourceViewCopy-    pageViewPaste               = sourceViewPaste-    pageViewHandleKeyAction     = sourceViewHandleKeyAction-    pageViewScrollToTop         = sourceViewScrollToTop-    pageViewScrollToBottom      = sourceViewScrollToBottom-    pageViewScrollVerticalPage  = sourceViewScrollVerticalPage-    pageViewScrollVerticalStep  = sourceViewScrollVerticalStep+    pageViewBuffer               = PageBufferWrap . sourceViewBuffer+    pageViewPlugId               = sourceViewPlugId+    pageViewFrame                = sourceViewFrame+    pageViewCut                  = sourceViewCut+    pageViewCopy                 = sourceViewCopy+    pageViewPaste                = sourceViewPaste+    pageViewLocalKeymap _        = sourceViewLocalKeymap+    pageViewLocalCommandMap _    = sourceViewLocalCommandMap+    pageViewFocus                = widgetGrabFocus . sourceViewView+    pageViewPropagateWidget      = castToWidget . sourceViewView+    pageViewSaveState view       = sourceViewSaveState view Nothing+    pageViewRestoreState view    = sourceViewRestoreState view Nothing+    pageViewWriteState view path = sourceViewSaveState view (Just path)+    pageViewReadState view path  = sourceViewRestoreState view (Just path)+    pageViewScrollToTop          = sourceViewScrollToTop+    pageViewScrollToBottom       = sourceViewScrollToBottom+    pageViewScrollVerticalPage   = sourceViewScrollVerticalPage+    pageViewScrollVerticalStep   = sourceViewScrollVerticalStep  -- | Internal function for create string buffer. sourceViewNew :: SourceBuffer -> PagePlugId -> IO SourceView@@ -145,14 +152,14 @@ sourceViewDisplayPositionStatus :: SourceView -> IO () sourceViewDisplayPositionStatus sb =    liftM2 (printf "Pos (%d, %d)") (sourceViewGetLine sb) (sourceViewGetColumn sb)-         >>= pageFrameUpdateStatusbar (sourceViewFrame sb) "Pos"+         >>= pageViewUpdateStatusbar sb "Pos"  -- | Display percent information. sourceViewDisplayPercentStatus :: SourceView -> IO () sourceViewDisplayPercentStatus sv = do   line <- sourceViewGetLine sv   lineCount <- sourceViewGetLineCount sv-  pageFrameUpdateStatusbar (sourceViewFrame sv) "Percent" ("(" ++ show (floor (i2d (line * 100) / i2d lineCount)) ++ "%)")+  pageViewUpdateStatusbar sv "Percent" ("(" ++ show (floor (i2d (line * 100) / i2d lineCount)) ++ "%)")    -- | Handle selection mark. sourceViewHandleSelectionMark :: SourceView -> IO ()  @@ -198,7 +205,7 @@   string <- sourceViewGetText a   writeFile filepath string   name <- sourceViewName a-  pageFrameShowOutputbar (sourceViewFrame a) ("Save " ++ name) Nothing+  pageViewShowOutputbar a ("Save " ++ name) Nothing  -- | Get buffer name. sourceViewName :: SourceView -> IO String@@ -212,8 +219,8 @@   ifM (SB.sourceBufferGetCanUndo sb)           (do             SB.sourceBufferUndo sb-            pageFrameShowOutputbar (sourceViewFrame a) "Undo!" Nothing)-          (pageFrameShowOutputbar (sourceViewFrame a) "No further undo information." Nothing)+            pageViewShowOutputbar a "Undo!" Nothing)+          (pageViewShowOutputbar a "No further undo information." Nothing)  -- | Redo. sourceViewRedo :: SourceView -> IO ()@@ -222,8 +229,8 @@   ifM (SB.sourceBufferGetCanRedo sb)           (do             SB.sourceBufferRedo sb-            pageFrameShowOutputbar (sourceViewFrame a) "Redo!" Nothing)-          (pageFrameShowOutputbar (sourceViewFrame a) "No further redo information." Nothing)+            pageViewShowOutputbar a "Redo!" Nothing)+          (pageViewShowOutputbar a "No further redo information." Nothing)  -- | String view wrap user action for undo/redo. sourceViewWrapAction :: SourceView -> IO () -> IO ()  @@ -389,62 +396,102 @@ sourceViewSetText :: SourceView -> String -> IO () sourceViewSetText = textViewSetText . sourceViewView +-- | Local keymap.+sourceViewLocalKeymap :: Map Text Text+sourceViewLocalKeymap = +    M.fromList+         [("M-a",    "Select all")+         ,("M-s",    "Save")+         ,("M-d",    "Delete lines")+         ,("M-D",    "Delete")+         ,("M-/",    "Undo")+         ,("M-?",    "Redo")+         ,("M-r",    "Reload")+         ,("M-,",    "Backward delete char")+         ,("M-.",    "Forward delete char")+         ,("M-<",    "Backward delete word")+         ,("M->",    "Forward delete word")+         ,("C-M-,",  "Delete to line start")+         ,("C-M-.",  "Delete to line end")+         ,("M-j",    "Forward line")+         ,("M-k",    "Backward line")+         ,("M-l",    "Forward char")+         ,("M-h",    "Backward char")+         ,("M-m",    "New line")+         ,("Down",   "Forward line")+         ,("Up",     "Backward line")+         ,("Left",   "Forward char")+         ,("Right",  "Backward char")+         ,("Return", "New line")+         ,("M-L",    "Forward word")+         ,("M-H",    "Backward word")+         ,("M-P-h",  "Smart home")+         ,("M-P-l",  "Smart end")+         ,("M-N",    "Open new line below")+         ,("M-P",    "Open new line above")+         ,("M-w",    "Duplicate lines below")+         ,("M-W",    "Duplicate lines above")+         ,("M-e",    "Transposes line below")+         ,("M-E",    "Transposes line above")+         ,("C-c",    "Toggle selection mark")+         ,("C-C",    "Exchange selection mark")+         ,("C-o",    "Open file")+         ,("C-g",    "Goto line")+         ,("C-G",    "Goto column")+         ]+ -- | String buffer keymap.-sourceViewKeymap :: Map Text (SourceView -> IO ())-sourceViewKeymap = +sourceViewLocalCommandMap :: Map Text (SourceView -> IO ())+sourceViewLocalCommandMap =      M.fromList -         [("M-a",    sourceViewSelectAll)-         ,("M-s",    sourceViewSave)-         ,("M-d",    sourceViewDelLines)-         ,("M-D",    sourceViewDelete)-         ,("M-/",    sourceViewUndo)-         ,("M-?",    sourceViewRedo)-         ,("M-r",    sourceViewReload)-         ,("M-,",    sourceViewDeleteBackwardChar)-         ,("M-.",    sourceViewDeleteForwardChar)-         ,("M-<",    sourceViewDeleteBackwardWord)-         ,("M->",    sourceViewDeleteForwardWord)-         ,("M-C-,",  sourceViewDeleteToLineStart)-         ,("M-C-.",  sourceViewDeleteToLineEnd)-         ,("M-j",    sourceViewForwardLine)-         ,("M-k",    sourceViewBackwardLine)-         ,("M-l",    sourceViewForwardChar)-         ,("M-h",    sourceViewBackwardChar)-         ,("M-m",    sourceViewNewline)-         ,("Down",   sourceViewForwardLine)-         ,("Up",     sourceViewBackwardLine)-         ,("Left",   sourceViewForwardChar)-         ,("Right",  sourceViewBackwardChar)-         ,("Return", sourceViewNewline)-         ,("M-L",    sourceViewForwardWord)-         ,("M-H",    sourceViewBackwardWord)-         ,("M-P-h",  sourceViewSmartHome)-         ,("M-P-l",  sourceViewSmartEnd)-         ,("M-N",    sourceViewOpenNewlineBelow)-         ,("M-P",    sourceViewOpenNewlineAbove)-         ,("M-w",    sourceViewDupLinesBelow)-         ,("M-W",    sourceViewDupLinesAbove)-         ,("M-e",    sourceViewTraLinesBelow)-         ,("M-E",    sourceViewTraLinesAbove)-         ,("C-c",    sourceViewToggleSelectionMark)-         ,("C-C",    sourceViewExchangeSelectionMark)-         ,("C-o",    sourceViewOpenFile)-         ,("C-g",    sourceViewGotoLine)-         ,("C-G",    sourceViewGotoColumn)+         [("Select all",                sourceViewSelectAll)+         ,("Save",                      sourceViewSave)+         ,("Delete lines",              sourceViewDelLines)+         ,("Delete",                    sourceViewDelete)+         ,("Undo",                      sourceViewUndo)+         ,("Redo",                      sourceViewRedo)+         ,("Reload",                    sourceViewReload)+         ,("Backward delete char",      sourceViewDeleteBackwardChar)+         ,("Forward delete char",       sourceViewDeleteForwardChar)+         ,("Backward delete word",      sourceViewDeleteBackwardWord)+         ,("Forward delete word",       sourceViewDeleteForwardWord)+         ,("Delete to line start",      sourceViewDeleteToLineStart)+         ,("Delete to line end",        sourceViewDeleteToLineEnd)+         ,("Forward line",              sourceViewForwardLine)+         ,("Backward line",             sourceViewBackwardLine)+         ,("Forward char",              sourceViewForwardChar)+         ,("Backward char",             sourceViewBackwardChar)+         ,("New line",                  sourceViewNewline)+         ,("Forward word",              sourceViewForwardWord)+         ,("Backward word",             sourceViewBackwardWord)+         ,("Smart home",                sourceViewSmartHome)+         ,("Smart end",                 sourceViewSmartEnd)+         ,("Open new line below",       sourceViewOpenNewlineBelow)+         ,("Open new line above",       sourceViewOpenNewlineAbove)+         ,("Duplicate lines below",     sourceViewDupLinesBelow)+         ,("Duplicate lines above",     sourceViewDupLinesAbove)+         ,("Transposes line below",     sourceViewTraLinesBelow)+         ,("Transposes line above",     sourceViewTraLinesAbove)+         ,("Toggle selection mark",     sourceViewToggleSelectionMark)+         ,("Exchange selection mark",   sourceViewExchangeSelectionMark)+         ,("Open file",                 sourceViewOpenFile)+         ,("Goto line",                 sourceViewGotoLine)+         ,("Goto column",               sourceViewGotoColumn)          ]  -- | Open file. sourceViewOpenFile :: SourceView -> IO () sourceViewOpenFile view = -  localInteractive view "fOpen file : " $ \ [path] ->                       +  interactive view [(IFile, "Open file : ", "")] $ \ [path] ->                              mkDaemonSignal (pageViewClient view) NewTab (NewTabArgs "PageEditor" path [])  -- | Goto column. sourceViewGotoColumn :: SourceView -> IO ()           sourceViewGotoColumn view@SourceView {sourceViewView = sourceView} = -  localInteractive view "nColumn : " $ \ [column] -> do+  interactive view [(INum, "Column : ", "")] $ \ [column] -> do       let number = read column :: Int       textViewGotoColumn sourceView number+      pageViewShowOutputbar view (show [column]) Nothing    -- | Goto row.   sourceViewGotoLine :: SourceView -> IO ()@@ -452,7 +499,7 @@                                    ,sourceViewBuffer = sourceBuffer} = do   let buffer = sourceBufferBuffer sourceBuffer   lines <- textBufferGetLineCount buffer-  localInteractive view ("nLine (1 - " ++ show lines ++ ") : ") $ \ [line] -> do+  interactive view [(INum, "Line (1 - " ++ show lines ++ ") : ", "")] $ \ [line] -> do       let number = read line :: Int       textViewGotoLine sourceView number @@ -460,8 +507,8 @@ sourceViewToggleSelectionMark :: SourceView -> IO () sourceViewToggleSelectionMark view =    ifM (textViewToggleSelectionMark $ sourceViewView view )-      (pageFrameUpdateStatusbar (sourceViewFrame view) "Selection" "Selection (Active)")-      (pageFrameUpdateStatusbar (sourceViewFrame view) "Selection" "Selection (Inactive)")+      (pageViewUpdateStatusbar view "Selection" "Selection (Active)")+      (pageViewUpdateStatusbar view "Selection" "Selection (Inactive)")  -- | Exchange selection mark. sourceViewExchangeSelectionMark :: SourceView -> IO ()@@ -491,16 +538,45 @@   textViewScrollVertical tv sw (if isDown then stepInc else (- stepInc))   sourceViewApplySelectionMark a --- | Handle key action.-sourceViewHandleKeyAction :: SourceView -> Text -> SerializedEvent -> IO ()-sourceViewHandleKeyAction view keystoke sEvent = -  case M.lookup keystoke sourceViewKeymap of-    -- Execute action when found in keymap.-    Just action -> action view-    -- Otherwise propagate event.-    Nothing -> widgetPropagateEvent (sourceViewView view) sEvent - -- | Source view scrolled window. sourceViewScrolledWindow :: SourceView -> ScrolledWindow     sourceViewScrolledWindow =   pageFrameScrolledWindow . sourceViewFrame++-- | Save state.+sourceViewSaveState :: SourceView -> Maybe FilePath -> IO ()+sourceViewSaveState view@(SourceView {sourceViewBuffer  = buffer}) +                    statePath = do+  -- Get cursor.+  line <- textBufferGetLine (sourceBufferBuffer buffer)+  column <- textBufferGetLineOffset (sourceBufferBuffer buffer)++  -- Get scroll position.+  scrolledWindowPosition <- textViewGetCursorAlign (sourceViewView view)++  -- Save state.+  let state = SourceState (Just (line, column)) scrolledWindowPosition +  case statePath of+    Nothing   -> writeTVarIO (sourceBufferState buffer) state+    Just path -> writeConfigPath path state++-- | Restore state.+sourceViewRestoreState :: SourceView -> Maybe FilePath -> IO ()+sourceViewRestoreState SourceView {sourceViewBuffer  = buffer+                                  ,sourceViewView    = textView} +                       statePath = do+  bufferState <- readTVarIO (sourceBufferState buffer)+  (SourceState cursor scrolledWindowPosition) <- +      case statePath of+        Just path -> readConfigPath path bufferState+        Nothing   -> return bufferState++  -- Restore cursor.+  cursor ?>= \ (line, column) -> do+    textViewGotoLine textView line+    textViewGotoColumn textView column++  -- Restore cursor alignment.+  -- TODO, we need find a way to restore TextView scroll position.+  -- textViewSetCursorAlign can't work if cursor not in visible area.+  textViewSetCursorAlign textView scrolledWindowPosition
Setup.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -19,6 +19,7 @@ import Distribution.Simple import Manatee.Core.Config import Manatee.Core.Types+import Manatee.Toolkit.Cabal.Utils import Manatee.Extension.Editor.PageMode  import qualified Data.Map as M@@ -26,7 +27,7 @@ main = defaultMainWithHooks         simpleUserHooks {          -- Update PageTypeRule after install successful.-         postInst = \ _ _ _ _ -> do+         postInst = \ _ _ pack_des lbi -> do              (PageTypeRule rule) <- readConfig pageTypeRulePath (PageTypeRule M.empty)              writeConfig pageTypeRulePath (PageTypeRule (M.insert "PageEditor" "manatee-editor" rule))              -- Update PageModeRule.@@ -37,4 +38,13 @@                                (Right $ M.fromList $                                        map (\x -> (pageModeRegexp x, pageModeName x)) sourceModeList                                ) modeRule))+             -- Update Application info.+             let snapshotPath = getDataFilePath pack_des lbi "data/welcome/snapshot.png"+                 welcomeFile = getDataFilePath pack_des lbi "data/welcome/welcome.txt"+             (WelcomeApplication apps) <- readConfig welcomeApplicationPath (WelcomeApplication M.empty)+             writeConfig welcomeApplicationPath (WelcomeApplication+                                                 (M.insert +                                                       ("Editor", snapshotPath)+                                                       ("PageEditor", welcomeFile, [])+                                                       apps))        }
+ data/welcome/snapshot.png view

binary file changed (absent → 142792 bytes)

+ data/welcome/welcome.txt view
@@ -0,0 +1,24 @@+Hi, there!++Welcome to Manatee (The Haskell/Gtk+ Integrated Live Environment) !++Want to know what's it? +Please watch video: +    http://www.youtube.com/watch?v=weS6zys3U8k or http://www.youtube.com/watch?v=A3DgKDVkyeM+	+How to use it?+Please read wiki page:+    http://haskell.org/haskellwiki/Manatee	+	+Here have some screenshot:+    http://goo.gl/MkVw+	+Please report bug or suggestion to:+    manatee-user@googlegroups.com++If you're lucky, you can find me (ManateeLazyCat) at IRC:+   (irc.freenode.net 6667 ##manatee)++Enjoy! :)++   -- Andy
manatee-editor.cabal view
@@ -1,13 +1,13 @@ name:			manatee-editor-version:		0.0.8+version:		0.1.0 Cabal-Version:	>= 1.6 license:		GPL-3 license-file:	LICENSE-copyright:		(c) 2009 ~ 2010 Andy Stewart+copyright:		(c) 2010 ~ 2011 Andy Stewart synopsis:		Editor extension for Manatee. description:    manatee-editor is editor extension for Manatee (Haskell/Gtk+ Integrated Live Environment)  .- Video at (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>+ Video (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>  .  Screenshots at : <http://goo.gl/MkVw>  .@@ -22,16 +22,20 @@ stability:		provisional category:		Manatee, Editor, IDE -tested-with:	GHC==6.12.3+tested-with:	GHC==7.0.2 build-type:		Custom +data-dir: ""+data-files: data/welcome/snapshot.png+            data/welcome/welcome.txt+ Source-Repository head   type:         darcs   location:     http://patch-tag.com/r/AndyStewart/manatee-editor    Library-     build-depends: base >= 4 && < 5, manatee-core >= 0.0.8, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,-                    containers >= 0.3.0.0, gtk-serialized-event >= 0.12.0, gtk >= 0.12.0, gtksourceview2 >= 0.12.0,+     build-depends: base >= 4 && < 5, manatee-core >= 0.1.0, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,+                    containers >= 0.3.0.0, gtk >= 0.12.0, gtksourceview2 >= 0.12.0, derive, binary,                     text >= 0.7.1.0, bytestring >= 0.9.1.5, dbus-core, regex-tdfa, filepath      exposed-modules:          Manatee.Extension.Editor