80 lines
2.1 KiB
EmacsLisp
80 lines
2.1 KiB
EmacsLisp
(require 'comint)
|
|
|
|
(define-derived-mode factor-listener-mode comint-mode "Factor listener"
|
|
(setq comint-prompt-regexp "^ "))
|
|
|
|
(defvar factor-binary "/scratch/factor-darcs/repos/Factor/f")
|
|
(defvar factor-image "/scratch/factor-darcs/repos/Factor/factor.image")
|
|
|
|
(defun factor-server ()
|
|
(interactive)
|
|
(make-comint "factor-server" factor-binary nil factor-image "-shell=tty")
|
|
(comint-send-string "*factor-server*" "USE: jedit telnet\n"))
|
|
|
|
;; (defun factor-listener ()
|
|
;; (interactive)
|
|
;; (factor-server)
|
|
;; (sleep-for 0 500)
|
|
;; (switch-to-buffer (make-comint "factor-listener" '("localhost" . 9999)))
|
|
;; (rename-uniquely)
|
|
;; (factor-listener-mode))
|
|
|
|
(defun factor-listener ()
|
|
(interactive)
|
|
(factor-server)
|
|
(sleep-for 0 500)
|
|
(if (get-buffer "*factor-listener*")
|
|
(save-excursion
|
|
(set-buffer "*factor-listener*")
|
|
(rename-uniquely)))
|
|
(switch-to-buffer (make-comint "factor-listener" '("localhost" . 9999)))
|
|
(factor-listener-mode))
|
|
|
|
(defun factor-listener-restart ()
|
|
(interactive)
|
|
(factor-server)
|
|
(sleep-for 0 500)
|
|
(make-comint-in-buffer
|
|
"factor-listener" (current-buffer) '("localhost" . 9999)))
|
|
|
|
(defun load-factor-file (file-name)
|
|
(interactive "fLoad Factor file: ")
|
|
(comint-send-string nil (format "\"%s\" run-file\n" file-name)))
|
|
|
|
(defun factor-update-stack-buffer (&optional string)
|
|
(interactive)
|
|
(save-excursion
|
|
(set-buffer (get-buffer-create "*factor-stack*"))
|
|
(erase-buffer)
|
|
(comint-redirect-send-command-to-process
|
|
".s" "*factor-stack*" "*factor-listener*" nil)))
|
|
|
|
(defvar factor-update-stackp nil "*")
|
|
|
|
(defun factor-send-input ()
|
|
(interactive)
|
|
(comint-send-input)
|
|
(if factor-update-stackp
|
|
(progn (sleep-for 0 250) (factor-update-stack-buffer))))
|
|
|
|
(defun factor-synopsis ()
|
|
(interactive)
|
|
(message
|
|
(first
|
|
(comint-redirect-results-list-from-process
|
|
(get-buffer-process "*factor-listener*")
|
|
(format "\\ %s synopsis print" (thing-at-point 'symbol))
|
|
;; "[ ]*\\(.*\\)\n"
|
|
"\\(.*\\)\n"
|
|
1))))
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; mode
|
|
|
|
;; syntax table
|
|
|
|
;; (push '("\\.factor\\'" . factor-mode) auto-mode-alist)
|
|
|
|
;; synopsis of word at point |