FG42/lib/john_titor.el

52 lines
1.5 KiB
EmacsLisp

;;; john_titor --- Enables RPC for john titor client
;;; Commentary:
;;; Code:
(require 'epc)
(defvar epc-connection nil
"The EPC connection to the john titor client.")
(defun john_titor/connect ()
"Connect to john titor via RPC."
(setq epc-connection
(if debug-on-error
(epc:start-epc "node" (list (concat
(getenv "HOME")
"/.fg42/john_titor/target/main.js")))
(epc:start-epc "node" (list (concat
(getenv "HOME")
"/.fg42/john_titor/app.js"))))))
(defun john_titor/call-sync (command args)
"Call the given COMMAND with the given ARGS via john titor epc."
(epc:call-sync epc-connection command args))
(defun eval-string (str)
"Evaluate the given STR."
(message str)
(eval (car (read-from-string (format "(progn %s)" str)))))
(defun john_titor/call (command args f)
"Call the COMMAND with the given ARGS in async fashion and call F as callback."
(deferred:$
(epc:call-deferred epc-connection command args)
(deferred:nextc it
(lambda (x)
(funcall f x)))
(deferred:error it
(lambda (err)
(message "ERROR: %s" err)))))
(defun john_titor/disconnect ()
"Disconnect from the john titor client."
(epc:stop-epc epc-connection)
(setq epc-connection nil))
(defun john_titor/restart ()
"Restart the epc server."
(john_titor/disconnect)
(john_titor/connect))
(provide 'john_titor)
;;; john_titor.el ends here