
Hi all, I use gtk2hs develop editor. I use below function handle key press event. keyPressHandler :: Event -> IO Bool keyPressHandler (Key {eventKeyName = keyName}) = do case keyName of "Escape" -> do mainQuit >> return True _ -> do -- How to insert character self? return True I need handle key press event, and insert itself if key is character (like: 'a' 'b' 'c'). How to insert character self in sourceView buffer? Below are complete source code: ------------------------------> source code start <------------------------------ import Graphics.UI.Gtk import Graphics.UI.Gtk.SourceView import Graphics.UI.Gtk.Abstract.Widget import Graphics.UI.Gtk.Gdk.Events import Text.Printf import Control.Monad main :: IO () main = do -- Init. initGUI -- Root frame. rootFrame <- windowNew onDestroy rootFrame mainQuit -- quit main loop when root frame close -- Root frame status. -- windowFullscreen rootFrame -- fullscreen windowSetPosition rootFrame WinPosCenter -- set init position windowSetDefaultSize rootFrame 400 300 -- set init size -- Main box. mainBox <- vBoxNew False 0 containerAdd rootFrame mainBox -- Source view box. sourceViewBox <- vBoxNew False 0 containerAdd mainBox sourceViewBox -- Source view. sourceView <- sourceViewNew boxPackStart sourceViewBox sourceView PackNatural 0 -- Echo area box. echoAreaBox <- vBoxNew False 0 echoAreaAlign <- alignmentNew 0 1 1 1 containerAdd echoAreaBox echoAreaAlign containerAdd mainBox echoAreaBox -- Echo area. echoArea <- statusbarNew boxPackStart echoAreaBox echoArea PackNatural 0 -- Display. widgetShowAll rootFrame -- Handle keystroke. onKeyPress rootFrame $ keyPressHandler -- Update echo area. updateEchoArea sourceView echoArea -- Loop mainGUI keyPressHandler :: Event -> IO Bool keyPressHandler (Key {eventKeyName = keyName}) = do case keyName of "Escape" -> do mainQuit >> return True _ -> do return True updateEchoArea :: SourceView -> Statusbar -> IO () updateEchoArea sv sb = do buf <- textViewGetBuffer sv mark <- textBufferGetInsert buf iter <- textBufferGetIterAtMark buf mark line <- textIterGetLine iter col <- textIterGetLineOffset iter statusbarPop sb 1 statusbarPush sb 1 $ printf "Line %4d, Column %3d" (line + 1) (col + 1) return () ------------------------------> source code end <------------------------------ Any help? Thanks! -- Andy