[Haskell-cafe] How to write Manatee application?

Andy Stewart lazycat.manatee at gmail.com
Sun Jan 2 18:09:39 CET 2011

Hi all,

How to write Manatee extension? Now have answer:

Please look http://www.flickr.com/photos/48809572@N02/5031811365/lightbox/ to understand framework before continue.

Template code at http://hackage.haskell.org/package/manatee-template

First, i explain Manatee package hierarchy:

  manatee-core contain DBus protocol detail and toolkit use in other manatee packages.
  manatee-anything is multi-task search interface for user input.
  manatee contain daemon process, 
  Daemon process is root process to manage other manatee processes:
  such as render application process' graphics for sandbox protected, window manage ... etc.
  Daemon process just do manage job and don't running any special application code in it.
  Other manatee-* package, such as manatee-editor, manatee-browser...etc running in
  it's own process, you can write any code to implement your application,
  just need follow some interface:
   class Typeable a => PageBuffer a where
       -- Get buffer name.
       pageBufferGetName           :: a -> IO String
       -- Set buffer name.
       pageBufferSetName           :: a -> String -> IO ()
       -- DBus client to handle DBus signal
       pageBufferClient            :: a -> Client
       -- How to create view with buffer for MVC design.
       pageBufferCreateView        :: a -> PagePlugId -> IO PageViewWrap
       -- Page buffer mode.
       pageBufferMode              :: a -> PageMode
       -- Get package name to update user's configure.
       pageBufferPackageName       :: a -> IO String
   class Typeable a => PageView a where
       -- Buffer for view.
       pageViewBuffer              :: a -> PageBufferWrap
       -- GtkPlug id to send DBus signal to other process.
       pageViewPlugId              :: a -> TVar PagePlugId
       -- How to handle key action from daemon process.
       pageViewHandleKeyAction     :: a -> Text -> SerializedEvent -> IO ()
       -- How to do when manatee framework focus on current application.
       pageViewFocus               :: a -> IO ()       
       -- Scrolled window to contain application widget.
       pageViewScrolledWindow      :: a -> ScrolledWindow
       -- How to handle cut action, can ignore.
       pageViewCut                 :: a -> IO Bool
       -- How to handle copy action, can ignore.
       pageViewCopy                :: a -> IO Bool
       -- How to handle paste action, can ignore.
       pageViewPaste               :: a -> IO Bool
       -- How to scroll top postion, can ignore.
       pageViewScrollToTop         :: a -> IO ()
       -- How to scroll bottom postion, can ignore.
       pageViewScrollToBottom      :: a -> IO ()
       -- How to scroll vertical page, can ignore.
       pageViewScrollVerticalPage  :: Bool -> a -> IO ()
       -- How to scroll vertical step, can ignore.
       pageViewScrollVerticalStep  :: Bool -> a -> IO ()
       -- How to scroll to left side, can ignore.
       pageViewScrollToLeft        :: a -> IO ()
       -- How to scroll to right side, can ignore.
       pageViewScrollToRight       :: a -> IO ()
       -- How to scroll horizontal page, can ignore.
       pageViewScrollHorizontalPage:: Bool -> a -> IO ()
       -- How to scroll horizontal step, can ignore.
       pageViewScrollHorizontalStep:: Bool -> a -> IO ()
If you have any question, feel free to ask me (lazycat.manatee at gmail.com)

  -- Andy

More information about the Haskell-Cafe mailing list