Manatee: Difference between revisions

From HaskellWiki
mNo edit summary
Atravers (talk | contribs)
m Link to source repository dead
 
(98 intermediate revisions by 2 users not shown)
Line 8: Line 8:
efficient like Emacs.
efficient like Emacs.


Manatee use multi-processes framework, any sub-module running in separate process to protected core won't crash. So it
Manatee use [http://www.flickr.com/photos/48809572@N02/5031811365/lightbox/ Multi-Process Framework], any extension (include core) running in separate process to protected core won't crash. So it
minimize your losses when some unexpected exception throw in extension.
minimize your losses when some unexpected exception throw in extension.


You can find screenshots at : http://goo.gl/MkVw
Manatee = Chrome (sandbox) + Emacs (behaviour) + GTK+ (render engine) + Haskell (concurrent)  + Me (idea)


== Installation ==
Many people ask me "What's Manatee?", i think correct answer should be :


Below is build step for Manatee:
    Depend on you how to use it. :)


1) Install GHC compiler http://www.haskell.org/ghc/download_ghc_6_12_3.html:
== NOTE ==


Download ghc package for your system, then do below command :
Manatee is not design for WM, it's design for OS, so don't compare it with XMonad, it's really different thing with XMonad. Please watch '''Window split''' feature carefully in video to understand the difference, Manatee can split unlimited window for '''same''' application :
    http://www.youtube.com/watch?v=weS6zys3U8k or  http://www.youtube.com/watch?v=A3DgKDVkyeM


./configure && sudo make install
In principle, Manatee just need Linux kernel and GTK+, don't need the help of "Window Manager" or "Desktop Environment".


2) Install C library: In Debian use below command:
Manatee is open application framework, you can write '''any''' extension or plugins for Manatee, I won't limit it, you just need follow some interface API i build.


  sudo aptitude install libgtksourceview2.0-dev libgconf2-dev libwebkit-dev libcurl4-openssl-dev libgtkimageview-dev libpoppler-glib-dev poppler-data libtagc0-dev -y
This project still in early development, many features are missing, so i DON'T recommend use it as produce tool, just play it and report bug. :)


3) Install cabal:
At last, Manatee is not Emacs, Manatee is not XMond, Manatee is not Gnome... it's a new software...


If you're haskell newbie, use below command to install cabal (haskell expert ignore this):
== Video ==


sudo aptitude install cabal-install -y
HD version :


4) Install dependent Haskell library:
    http://www.youtube.com/watch?v=weS6zys3U8k


First make sure HOME/.cabal/bin/ in your PATH
Above video include Owl City's music, if you can't watch it, try below video, without sound:


Generic way is add `PATH=$PATH:~/.cabal/bin` in your ~/.bashrc
    http://www.youtube.com/watch?v=A3DgKDVkyeM


Then do below command (NOTE: don't use root permission with cabal, otherwise Manatee can't work):
Chinese people (this version is not clear, please fighting GFW access YouTube.com):


cabal update && cabal install happy c2hs gtk2hs-buildtools glib gio pango cairo gtk
    http://v.youku.com/v_show/id_XMjI2MDMzODI4.html


5) Install Manatee (same, don't use root permission):
==  Screenshots ==


cabal install manatee-core manatee-anything manatee-browser manatee-editor manatee-filemanager manatee-imageviewer manatee-ircclient manatee-mplayer manatee-pdfviewer manatee-processmanager manatee-reader manatee
    http://goo.gl/MkVw


That's all, then type command manatee to play it! :)
== Hackage package ==


Now Manatee looks can't work in XMonad, i'm working on it. It's no problem if you use Gnome.
    http://hackage.haskell.org/package/manatee


== Quick start ==
== IRC channel ==


When you first run manatee, it will show a [http://www.flickr.com/photos/48809572@N02/5154125192/lightbox/ Global Search menu]
    irc.freenode.net 6667 ##manatee
In search menu, it will search different kind candidate for your input.


Example, when you type http://www.google.com in it, it will show '''Browser''' candidate for you, then you hit RETURN or "Alt + m" will open link in browser.
==  Mailing-List ==


If you type Haskell filepath, example, /path/Haskell.hs, manatee will call editor module to open /path/Haskell.hs
    manatee-user@googlegroups.com


You can type pdf filepath to open in pdf viewer module, image filepath is same.
    manatee-develop@googlegroups.com


You also can type directory to open in file manager.
== Twitter ==


Press F3 will start RSS/Atom reader
  https://twitter.com/manateelazycat


Press F6 will login #haskell channel (Or Press F7 to login with you own nick)
== Installation ==


== Focus Interactivebar ==
Below is build step for Manatee:


Alt + f    => Focus interactive bar
1) Install gold-linker to accelerate installation:


Alt + F    => Focus buffer
I suggest use gold-linker instead ld to accelerate installation.


Alt + b    => Toggle focus between interactive bar and current buffer
In Debian system, you just need do below command:


Alt + g    => Close interactive bar
sudo aptitude install binutils-gold -y


== Interactivebar keymap ==
This step is optional, it's okay use ld link program, just much slow. :)


Alt + j    => Select next candidate
2) Install GHC compiler http://www.haskell.org/ghc/download_ghc_7_0_3:


Alt + k    => Select previous candidate
Download ghc package for your system, then do below command :


Alt + J    => Select next search menu
./configure && sudo make install


Alt + K    => Select previous search menu
3) Install C library: In Debian use below command:


Alt + N    => Complete select candidate
sudo aptitude install libgtksourceview2.0-dev libgconf2-dev libwebkit-dev libcurl4-openssl-dev libgtkimageview-dev libpoppler-glib-dev poppler-data libtagc0-dev libvte-dev -y


Tab        => Complete candidate for input
4) Install cabal:


Backspace  => Delete char backward
Download http://hackage.haskell.org/packages/archive/cabal-install/0.10.2/cabal-install-0.10.2.tar.gz


Alt + ,    => Delete char backward
Decompress cabal-install-0.10.2.tar.gz and do below command:


Alt + <    => Delete word backward
cd ./cabal-install-0.10.2 && sudo chmod +x ./bootstrap.sh && ./bootstrap.sh


Alt + d    => Clean input
5) Install dependent Haskell library:


Alt + x    => Cut input
First make sure HOME/.cabal/bin/ in your PATH


Alt + c    => Copy input
Generic way is add `PATH=$PATH:~/.cabal/bin` in your ~/.bashrc


Alt + v    => Paste input
Then do below command (NOTE: don't use root permission with cabal, otherwise Manatee can't work):


== Tab keymap ==
cabal update && cabal install alex happy c2hs && cabal install gtk2hs-buildtools glib gio pango cairo gtk


Alt + 7    => Select left tab
6) Install Manatee:


Alt + 8    => Select right tab
Install all Manatee packages (same, don't use root permission):


Alt + &    => Select first tab
cabal install manatee-all


Alt + *    => Select last tab
If you don't want install all Manatee packages, you can install basic package like below:


Alt + '    => Close current tab
cabal install manatee-core manatee-welcome manatee


Alt + "    => Close all tabs except current one
Then choose extension package list in below to install:


Alt + 9    => Select previous tab group
manatee-browser
manatee-editor
manatee-filemanager
manatee-imageviewer
manatee-ircclient
manatee-mplayer
manatee-pdfviewer
manatee-processmanager
manatee-reader
manatee-curl
manatee-terminal


Alt + 0    => Select next tab group
Note if you don't install any extension package, nothing will show in manatee, so you at least to choose one extension to install.


Ctrl + 7  => Move current tab to left
That's all, then type command manatee to play it! :)


Ctrl + 8  => Move current tab to right
I have test, Manatee can works well in Gnome, KDE, XMonad and XFCE


Ctrl + &  => Move current tab to first
== Quick start ==
 
Ctrl + *  => Move current tab to last
 
Ctrl + '  => Undo tab close action with current model
 
Ctrl + "  => Undo tab close action globally
 
== Window keymap ==
 
Alt + t    => Split current window vertically
 
Alt + T    => Split current window hortizontally
 
Alt + n    => Select next window
 
Alt + p    => Select previous window
 
Alt + ;    => Close current window
 
Alt + :    => Close all windows except current one
 
Super + .  => Enlarge current window
 
Super + ,  => Shrink current window
 
Super + j    => Enlarge window down
 
Super + k    => Enlarge window up
 
Super + h    => Enlarge window left
 
Super + l    => Enlarge window right
 
Super + J    => Shrink window down
 
Super + K    => Shrink window up
 
Super + H    => Shrink window left
 
Super + L    => Shrink window right
 
== Browser keymap ==
 
Alt + r      => Reload current page
 
Alt + R      => Reload current page without use cache
 
Alt + ,      => Backward history
 
Alt + .      => Forward history
 
Alt + -      => Zoom out page
 
Alt + =      => Zoom in page
 
== Editor keymap ==


Alt + a   =>    sourceViewSelectAll
When you first use Manatee, will show all manatee extension in a welcome tab.
Just click to use it.


Alt + s    =>    sourceViewSave
If you don't know keymap, just hit C-/ or C-?


Alt + d    =>    sourceViewDelLines
Enjoy! :)


Alt + D    =>    sourceViewDelete
== Report bug ==


Alt + /    =>    sourceViewUndo
Manatee is distributed framework, it allowed you install extension don't need depend each other,
but it's easy to break if some package is older than core packages (manatee-core, manatee),
so please make sure '''all''' packages has update to newest version before you report bug to
manatee-user@googlegroups.com . Thanks! :)


Alt + ?    =>    sourceViewRedo
== Download source code ==


Alt + r    =>    sourceViewReload
Download script from :


Alt + ,    =>    sourceViewDeleteBackwardChar
    https://patch-tag.com/r/AndyStewart/manatee/snapshot/current/content/pretty/repos.sh


Alt + .   =>    sourceViewDeleteForwardChar
And do
    sudo chmod +x ./repos.sh && ./repos.sh get


Alt + <    =>    sourceViewDeleteBackwardWord
Source code will download at  *parent* directory of reposh.sh, example,  if repos.sh at /home/andy/, source code will download at /home


Alt + >    =>    sourceViewDeleteForwardWord
== Customize ==


Alt + Ctrl + ,         =>    sourceViewDeleteToLineStart
After change configure file, re-install current package will mix configure file to build your own version.
(Or press "Ctrl + i" in current application)


Alt + Ctrl + .         =>    sourceViewDeleteToLineEnd
Manatee developer can press "Ctrl + u" to debug configure file in '''runtime''', you still need to re-install the current package if you want to start the configuration file take effect the next time,


Alt + j    =>    sourceViewForwardLine
You can find default configure template in package (manatee-*/Config directory)


Alt + k    =>    sourceViewBackwardLine
== How to write Manatee extension ==


Alt + l    =>    sourceViewForwardChar
Please look [http://www.flickr.com/photos/48809572@N02/5031811365/lightbox/ Framework] before continue.


Alt + h    =>    sourceViewBackwardChar
Template package at http://hackage.haskell.org/package/manatee-template


Alt + m    =>   sourceViewNewline
First, i explain Manatee package hierarchy:
   manatee-core contain DBus protocol detail and toolkit use in other manatee packages.
 
  manatee-welcome is use for show welcome page for manatee extension.
 
  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:


Alt + L    =>    sourceViewForwardWord
Manatee application interface:


Alt + H    =>    sourceViewBackwardWord
instance PageBuffer TemplateBuffer where
    -- Get buffer name from Template buffer.
    pageBufferGetName          = readTVarIO . templateBufferFilePath


Alt + Super + h         =>    sourceViewSmartHome
    -- Set buffer name.
    pageBufferSetName a         = writeTVarIO (templateBufferFilePath a)


Alt + Super + l         =>    sourceViewSmartEnd
    -- DBus client.
    pageBufferClient            = templateBufferClient


Alt + N    =>   sourceViewOpenNewlineBelow
    -- How to create TemplateView from TemplateBuffer for multiple view design.
    pageBufferCreateView a pId  = PageViewWrap <$> templateViewNew a pId


Alt + P    =>    sourceViewOpenNewlineAbove
    -- Page mode.
    pageBufferMode              = templateBufferMode


Alt + w    =>    sourceViewDupLinesBelow
    -- Get package name to update user's configure.
    pageBufferPackageName _    = fmap takeFileName getDataDir


Alt + W    =>    sourceViewDupLinesAbove
    -- Save buffer state.
    pageBufferWriteState        = templateBufferWriteState
   
    -- Restore buffer state.
    pageBufferReadState        = templateBufferReadState


Alt + e    =>    sourceViewTraLinesBelow
instance PageView TemplateView where
    -- Page buffer.
    pageViewBuffer                = PageBufferWrap . templateViewBuffer
                                 
    -- GtkPlug id.               
    pageViewPlugId                = templateViewPlugId
                                 
    -- Page Frame.               
    pageViewFrame                = templateViewFrame
                                 
    -- Local keymap.             
    pageViewLocalKeymap _        = templateViewLocalKeymap


Alt + E    =>    sourceViewTraLinesAbove
    -- Command map.
    pageViewLocalCommandMap _    = templateViewLocalCommandMap


Ctrl + c =>    sourceViewToggleSelectionMark
    -- How to focus when manatee focus current application.
    pageViewFocus                = widgetGrabFocus . templateViewView


Ctrl + C =>    sourceViewExchangeSelectionMark
    -- Which widget to propagate event.
    pageViewPropagateWidget      = castToWidget . templateViewView
                               
    -- Save view state.         
    pageViewSaveState view        = templateViewSaveState view Nothing


Ctrl + o =>    sourceViewOpenFile
    -- Restore view state.
    pageViewRestoreState view    = templateViewRestoreState view Nothing


Ctrl + g =>    sourceViewGotoLine
    -- Save view state to file.
    pageViewWriteState view path  = templateViewSaveState view (Just path)


Ctrl + G =>    sourceViewGotoColumn
    -- Restore view state from file.
    pageViewReadState view path  = templateViewRestoreState view (Just path)


== File Manager keymap ==
    -- How to handle cut action, can ignore.
    pageViewCut                = templateViewCut


j      =>      next file
    -- How to handle copy action, can ignore.
    pageViewCopy                = templateViewCopy


k      =>      previous file
    -- How to handle paste action, can ignore.
    pageViewPaste              = templateViewPaste


J      =>      scroll to bottom
    -- How to scroll top postion, can ignore.
    pageViewScrollToTop        = templateViewScrollToTop


K      =>      scroll to top
    -- How to scroll bottom postion, can ignore.
    pageViewScrollToBottom      = templateViewScrollToBottom


Space  =>      scroll page up
    -- How to scroll vertical page, can ignore.
    pageViewScrollVerticalPage  = templateViewScrollVerticalPage


b      =>      scroll page down
    -- How to scroll vertical step, can ignore.
    pageViewScrollVerticalStep  = templateViewScrollVerticalStep


n      =>      sort by name.
    -- How to scroll to left side, can ignore.
    pageViewScrollToLeft        = templateViewScrollToLeft


x       =>      sort by extension type
    -- How to scroll to right side, can ignore.
    pageViewScrollToRight       = templateViewScrollToRight


s      =>      sort by size
    -- How to scroll horizontal page, can ignore.
    pageViewScrollHorizontalPage= templateViewScrollHorizontalPage


t      =>      sort by time
    -- How to scroll horizontal step, can ignore.
    pageViewScrollHorizontalStep= templateViewScrollHorizontalStep


'      =>      jump upper directory
== Todo ==


\      =>      open upper directory in new tab
'''Optimise Code'''


m      =>      open directory or file
'''Core'''


M      =>      open directory in new tab
Perfect library [https://patch-tag.com/r/AndyStewart/gtk-serialized-event/home gtk-serialized-event] to support all GTK+ event


== Image Viewer keymap ==
Support input method


j =>    scroll up
Search class interface


k =>    scroll down
'''Customize System'''


h =>    scroll right
Convert haskell config to graphics make it easy to customize.


l =>    scroll left
'''Browser'''


Space        =>    scroll page up
Javascript framework


b =>    scroll page down
Save password


J =>    scroll to bottom
Auto fill


K =>    scroll to up
Cache support


, =>    zoom image out
Integrate Google SafeBrowse.


. =>    zoom image in
'''IDE features:'''


m =>    zoom image to screen size
Code completion


n =>    next image
Code snippet


p =>    prevoius image
Fly check


N =>    last image
Fly make


P =>    first image
Integrated compiler


< =>    rotate left
'''RSS/Atom reader'''


> =>    rotate right
Offline view support


/ =>    rotate mirror
'''IRC client'''


s =>    auto show
SSL support (change code in library [http://hackage.haskell.org/package/fastirc fastirc])


B =>    set as background (just work for gnome)
Support more command


== IRC client keymap ==
Support private chat


Alt + m =>      send message
Support log


Ctrl + m =>      translate message and send
'''Image Viewer'''


Ctrl + n =>      switch mother-language and translate language
Display current image index


Ctrl + N =>      send morse code
Fullscreen display


Alt + M =>      move to prompt position
Support orientation, need binding library libextractor first.


Alt + N =>      clean input
'''Pdf Viewer'''


Alt + a =>      select all
Support Zoom


Alt + d =>      delete lines
'''Process Manager'''


Alt + D =>      delete selection
Draw CPU log


Alt + , =>      delete char backward
'''Mail-Client'''


Alt + . =>      delete char forward
Support mail search


Alt + < =>      delete word backward
Support offline view


Alt + > =>      delete word forward
'''Org-Mode'''


Alt + Ctrl + ,         =>      delete to line start
Build [http://orgmode.org/ OrgMode] for TODO manage.


Alt + Ctrl + .         =>      delete to line end
'''Session Manager'''


Alt + j =>      forward line
Support different layout switch


Alt + k =>      backward line
'''Proxy interface'''


Alt + l =>      forward char
Build rule to provide proxy interface for Manatee.


Alt + h =>      backward char
'''File Manager'''


Alt + L =>      forward word
Basic operation: create, copy, delete.


Alt + H =>      backward word
History forward/backward support.


Alt + Super + h =>      smart home
'''Multi-Language dictionary'''


Alt + Super + l =>      smart end
'''CHM viewer'''


Ctrl + c =>      toggle select mark
Binding library libchm first.


Ctrl + C =>      exchange select mark
'''PS viewer'''


Ctrl + o =>      open url in browser
Binding library libspectre first.


Ctrl + j =>      translate message
'''DVI viewer'''


Ctrl + J =>      translate morse code
Binding [http://djvu.sourceforge.net/ djvu] first.


Ctrl + k =>      read IRC message (need install festival in your system)
'''BT-Client'''


'''Twitter client'''


'''Terminal emulator'''


== How to write Manatee extension ==
Use MVC design terminal emulator replace VTE widget, or patch to VTE to support MVC. :)


Add soon
[[Category:Pages with broken file links]]

Latest revision as of 02:36, 26 April 2021

Introduction

Manatee is Haskell integrated environment written in Haskell.

The goal of the Manatee project is to provide a fast, safe and flexible integrated environment for haskell hacking.

You can consider it is new environment mix Gnome and Emacs. Like Gnome to provide friendly graphics interface and work efficient like Emacs.

Manatee use Multi-Process Framework, any extension (include core) running in separate process to protected core won't crash. So it minimize your losses when some unexpected exception throw in extension.

Manatee = Chrome (sandbox) + Emacs (behaviour) + GTK+ (render engine) + Haskell (concurrent) + Me (idea)

Many people ask me "What's Manatee?", i think correct answer should be :

   Depend on you how to use it. :)

NOTE

Manatee is not design for WM, it's design for OS, so don't compare it with XMonad, it's really different thing with XMonad. Please watch Window split feature carefully in video to understand the difference, Manatee can split unlimited window for same application :

   http://www.youtube.com/watch?v=weS6zys3U8k or  http://www.youtube.com/watch?v=A3DgKDVkyeM

In principle, Manatee just need Linux kernel and GTK+, don't need the help of "Window Manager" or "Desktop Environment".

Manatee is open application framework, you can write any extension or plugins for Manatee, I won't limit it, you just need follow some interface API i build.

This project still in early development, many features are missing, so i DON'T recommend use it as produce tool, just play it and report bug.  :)

At last, Manatee is not Emacs, Manatee is not XMond, Manatee is not Gnome... it's a new software...

Video

HD version :

   http://www.youtube.com/watch?v=weS6zys3U8k

Above video include Owl City's music, if you can't watch it, try below video, without sound:

   http://www.youtube.com/watch?v=A3DgKDVkyeM

Chinese people (this version is not clear, please fighting GFW access YouTube.com):

   http://v.youku.com/v_show/id_XMjI2MDMzODI4.html

Screenshots

   http://goo.gl/MkVw

Hackage package

   http://hackage.haskell.org/package/manatee

IRC channel

   irc.freenode.net 6667 ##manatee

Mailing-List

   manatee-user@googlegroups.com 
   manatee-develop@googlegroups.com

Twitter

 https://twitter.com/manateelazycat

Installation

Below is build step for Manatee:

1) Install gold-linker to accelerate installation:

I suggest use gold-linker instead ld to accelerate installation.

In Debian system, you just need do below command:

sudo aptitude install binutils-gold -y

This step is optional, it's okay use ld link program, just much slow. :)

2) Install GHC compiler http://www.haskell.org/ghc/download_ghc_7_0_3:

Download ghc package for your system, then do below command :

./configure && sudo make install

3) Install C library: In Debian use below command:

sudo aptitude install libgtksourceview2.0-dev libgconf2-dev libwebkit-dev libcurl4-openssl-dev libgtkimageview-dev libpoppler-glib-dev poppler-data libtagc0-dev libvte-dev -y

4) Install cabal:

Download http://hackage.haskell.org/packages/archive/cabal-install/0.10.2/cabal-install-0.10.2.tar.gz

Decompress cabal-install-0.10.2.tar.gz and do below command:

cd ./cabal-install-0.10.2 && sudo chmod +x ./bootstrap.sh && ./bootstrap.sh

5) Install dependent Haskell library:

First make sure HOME/.cabal/bin/ in your PATH

Generic way is add `PATH=$PATH:~/.cabal/bin` in your ~/.bashrc

Then do below command (NOTE: don't use root permission with cabal, otherwise Manatee can't work):

cabal update && cabal install alex happy c2hs && cabal install gtk2hs-buildtools glib gio pango cairo gtk

6) Install Manatee:

Install all Manatee packages (same, don't use root permission):

cabal install manatee-all

If you don't want install all Manatee packages, you can install basic package like below:

cabal install manatee-core manatee-welcome manatee

Then choose extension package list in below to install:

manatee-browser
manatee-editor
manatee-filemanager
manatee-imageviewer
manatee-ircclient
manatee-mplayer
manatee-pdfviewer
manatee-processmanager
manatee-reader
manatee-curl
manatee-terminal

Note if you don't install any extension package, nothing will show in manatee, so you at least to choose one extension to install.

That's all, then type command manatee to play it! :)

I have test, Manatee can works well in Gnome, KDE, XMonad and XFCE

Quick start

When you first use Manatee, will show all manatee extension in a welcome tab. Just click to use it.

If you don't know keymap, just hit C-/ or C-?

Enjoy! :)

Report bug

Manatee is distributed framework, it allowed you install extension don't need depend each other, but it's easy to break if some package is older than core packages (manatee-core, manatee), so please make sure all packages has update to newest version before you report bug to manatee-user@googlegroups.com . Thanks! :)

Download source code

Download script from :

   https://patch-tag.com/r/AndyStewart/manatee/snapshot/current/content/pretty/repos.sh

And do

   sudo chmod +x ./repos.sh && ./repos.sh get

Source code will download at *parent* directory of reposh.sh, example, if repos.sh at /home/andy/, source code will download at /home

Customize

After change configure file, re-install current package will mix configure file to build your own version. (Or press "Ctrl + i" in current application)

Manatee developer can press "Ctrl + u" to debug configure file in runtime, you still need to re-install the current package if you want to start the configuration file take effect the next time,

You can find default configure template in package (manatee-*/Config directory)

How to write Manatee extension

Please look Framework before continue.

Template package 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-welcome is use for show welcome page for manatee extension.
  
  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:

Manatee application interface:

instance PageBuffer TemplateBuffer where

   -- Get buffer name from Template buffer.
   pageBufferGetName           = readTVarIO . templateBufferFilePath
   -- Set buffer name.
   pageBufferSetName a         = writeTVarIO (templateBufferFilePath a)
   -- DBus client.
   pageBufferClient            = templateBufferClient
   -- How to create TemplateView from TemplateBuffer for multiple view design.
   pageBufferCreateView a pId  = PageViewWrap <$> templateViewNew a pId
   -- Page mode.
   pageBufferMode              = templateBufferMode
   -- Get package name to update user's configure.
   pageBufferPackageName _     = fmap takeFileName getDataDir
   -- Save buffer state.
   pageBufferWriteState        = templateBufferWriteState
   
   -- Restore buffer state.
   pageBufferReadState         = templateBufferReadState

instance PageView TemplateView where

   -- Page buffer.
   pageViewBuffer                = PageBufferWrap . templateViewBuffer
                                 
   -- GtkPlug id.                
   pageViewPlugId                = templateViewPlugId
                                 
   -- Page Frame.                
   pageViewFrame                 = templateViewFrame
                                 
   -- Local keymap.              
   pageViewLocalKeymap _         = templateViewLocalKeymap
   -- Command map.
   pageViewLocalCommandMap _     = templateViewLocalCommandMap
   -- How to focus when manatee focus current application.
   pageViewFocus                 = widgetGrabFocus . templateViewView
   -- Which widget to propagate event.
   pageViewPropagateWidget       = castToWidget . templateViewView
                                
   -- Save view state.          
   pageViewSaveState view        = templateViewSaveState view Nothing
   -- Restore view state.
   pageViewRestoreState view     = templateViewRestoreState view Nothing
   -- Save view state to file.
   pageViewWriteState view path  = templateViewSaveState view (Just path)
   -- Restore view state from file.
   pageViewReadState view path   = templateViewRestoreState view (Just path)
   -- How to handle cut action, can ignore.
   pageViewCut                 = templateViewCut
   -- How to handle copy action, can ignore.
   pageViewCopy                = templateViewCopy
   -- How to handle paste action, can ignore.
   pageViewPaste               = templateViewPaste
   -- How to scroll top postion, can ignore.
   pageViewScrollToTop         = templateViewScrollToTop
   -- How to scroll bottom postion, can ignore.
   pageViewScrollToBottom      = templateViewScrollToBottom
   -- How to scroll vertical page, can ignore.
   pageViewScrollVerticalPage  = templateViewScrollVerticalPage
   -- How to scroll vertical step, can ignore.
   pageViewScrollVerticalStep  = templateViewScrollVerticalStep
   -- How to scroll to left side, can ignore.
   pageViewScrollToLeft        = templateViewScrollToLeft
   -- How to scroll to right side, can ignore.
   pageViewScrollToRight       = templateViewScrollToRight
   -- How to scroll horizontal page, can ignore.
   pageViewScrollHorizontalPage= templateViewScrollHorizontalPage
   -- How to scroll horizontal step, can ignore.
   pageViewScrollHorizontalStep= templateViewScrollHorizontalStep

Todo

Optimise Code

Core

Perfect library gtk-serialized-event to support all GTK+ event

Support input method

Search class interface

Customize System

Convert haskell config to graphics make it easy to customize.

Browser

Javascript framework

Save password

Auto fill

Cache support

Integrate Google SafeBrowse.

IDE features:

Code completion

Code snippet

Fly check

Fly make

Integrated compiler

RSS/Atom reader

Offline view support

IRC client

SSL support (change code in library fastirc)

Support more command

Support private chat

Support log

Image Viewer

Display current image index

Fullscreen display

Support orientation, need binding library libextractor first.

Pdf Viewer

Support Zoom

Process Manager

Draw CPU log

Mail-Client

Support mail search

Support offline view

Org-Mode

Build OrgMode for TODO manage.

Session Manager

Support different layout switch

Proxy interface

Build rule to provide proxy interface for Manatee.

File Manager

Basic operation: create, copy, delete.

History forward/backward support.

Multi-Language dictionary

CHM viewer

Binding library libchm first.

PS viewer

Binding library libspectre first.

DVI viewer

Binding djvu first.

BT-Client

Twitter client

Terminal emulator

Use MVC design terminal emulator replace VTE widget, or patch to VTE to support MVC. :)