module Emacs.Command
( setCommand
, defcommand'
) where
import Emacs.Core
import Data.Text
import Control.Monad (void)
setCommand :: Text -> InteractiveForm -> EmacsValue -> EmacsM ()
setCommand fname form f = do
fnameQ <- intern fname
interactiveFormQ <- intern "interactive-form"
void $ funcall2 "fset" fnameQ f
void $ funcall3 "put" fnameQ interactiveFormQ =<< evalString "'(interactive nil)"
defcommand'
:: Text
-> Doc
-> InteractiveForm
-> Arity
-> ([EmacsValue] -> EmacsM EmacsValue)
-> EmacsM ()
defcommand' fname (Doc doc) form (Arity arity) f =
setCommand fname form =<< mkFunction f arity arity doc