set mode-line-process in emacs
Ignore-this: 7152b56d2cf91742544051b7478398f8 darcs-hash:20120203104913-c41ad-ac905fae8b928ca0989cfc7acc070d854db74979
This commit is contained in:
parent
2f218dd339
commit
5deae637a0
|
@ -187,6 +187,35 @@ before the end of prompt.")
|
||||||
(select-window window)
|
(select-window window)
|
||||||
(goto-char (point-max)))))))
|
(goto-char (point-max)))))))
|
||||||
|
|
||||||
|
(defun set-utop-state (state)
|
||||||
|
"Change the utop state and mode-line-process."
|
||||||
|
(setq utop-state state)
|
||||||
|
(setq mode-line-process
|
||||||
|
(cond
|
||||||
|
((eq state 'edit)
|
||||||
|
": idle")
|
||||||
|
((eq state 'comp)
|
||||||
|
": completion")
|
||||||
|
((eq state 'wait)
|
||||||
|
": running")
|
||||||
|
((eq state 'done)
|
||||||
|
(let ((status (process-status utop-process)) (code (process-exit-status utop-process)))
|
||||||
|
(cond
|
||||||
|
((and (eq status 'exit) (= code 0))
|
||||||
|
": exited[0]")
|
||||||
|
((eq status 'exit)
|
||||||
|
(let ((msg (concat ": exited[" (int-to-string code) "]")))
|
||||||
|
(add-text-properties 0 (length msg) '(face bold) msg)
|
||||||
|
msg))
|
||||||
|
((eq status 'signal)
|
||||||
|
(let ((msg (concat ": killed[" (int-to-string code) "]")))
|
||||||
|
(add-text-properties 0 (length msg) '(face bold) msg)
|
||||||
|
msg))
|
||||||
|
(t
|
||||||
|
": unknown"))))
|
||||||
|
(t
|
||||||
|
": unknown"))))
|
||||||
|
|
||||||
;; +-----------------------------------------------------------------+
|
;; +-----------------------------------------------------------------+
|
||||||
;; | Edition control |
|
;; | Edition control |
|
||||||
;; +-----------------------------------------------------------------+
|
;; +-----------------------------------------------------------------+
|
||||||
|
@ -285,7 +314,7 @@ before the end of prompt.")
|
||||||
;; Make everything before the end prompt read-only
|
;; Make everything before the end prompt read-only
|
||||||
(add-text-properties (point-min) utop-prompt-max utop-non-editable-properties)
|
(add-text-properties (point-min) utop-prompt-max utop-non-editable-properties)
|
||||||
;; We are now editing
|
;; We are now editing
|
||||||
(setq utop-state 'edit)
|
(set-utop-state 'edit)
|
||||||
;; Move the point to the end of buffer in all utop windows
|
;; Move the point to the end of buffer in all utop windows
|
||||||
(utop-goto-point-max-all-windows))
|
(utop-goto-point-max-all-windows))
|
||||||
|
|
||||||
|
@ -334,7 +363,7 @@ before the end of prompt.")
|
||||||
(utop-insert-prompt utop-last-prompt))
|
(utop-insert-prompt utop-last-prompt))
|
||||||
;; Complete with a word
|
;; Complete with a word
|
||||||
((string= command "completion-word")
|
((string= command "completion-word")
|
||||||
(setq utop-state 'edit)
|
(set-utop-state 'edit)
|
||||||
(insert argument)
|
(insert argument)
|
||||||
;; Hide completion
|
;; Hide completion
|
||||||
(minibuffer-hide-completions))
|
(minibuffer-hide-completions))
|
||||||
|
@ -346,7 +375,7 @@ before the end of prompt.")
|
||||||
(push argument utop-completion))
|
(push argument utop-completion))
|
||||||
;; End of completion
|
;; End of completion
|
||||||
((string= command "completion-stop")
|
((string= command "completion-stop")
|
||||||
(setq utop-state 'edit)
|
(set-utop-state 'edit)
|
||||||
(with-output-to-temp-buffer "*Completions*"
|
(with-output-to-temp-buffer "*Completions*"
|
||||||
(display-completion-list (nreverse utop-completion)))
|
(display-completion-list (nreverse utop-completion)))
|
||||||
(setq utop-completion nil)))))
|
(setq utop-completion nil)))))
|
||||||
|
@ -381,7 +410,7 @@ sub-process."
|
||||||
(when (eq utop-state 'edit)
|
(when (eq utop-state 'edit)
|
||||||
(utop-perform
|
(utop-perform
|
||||||
;; We are now waiting for ocaml
|
;; We are now waiting for ocaml
|
||||||
(setq utop-state 'wait)
|
(set-utop-state 'wait)
|
||||||
;; Push input to pending input
|
;; Push input to pending input
|
||||||
(let ((input (buffer-substring-no-properties utop-prompt-max (point-max))))
|
(let ((input (buffer-substring-no-properties utop-prompt-max (point-max))))
|
||||||
(if utop-pending
|
(if utop-pending
|
||||||
|
@ -435,7 +464,7 @@ sub-process."
|
||||||
;; Split it
|
;; Split it
|
||||||
(let ((lines (split-string input "\n")))
|
(let ((lines (split-string input "\n")))
|
||||||
;; We are now waiting for completion
|
;; We are now waiting for completion
|
||||||
(setq utop-state 'comp)
|
(set-utop-state 'comp)
|
||||||
;; Send all lines to utop
|
;; Send all lines to utop
|
||||||
(process-send-string utop-process "complete:\n")
|
(process-send-string utop-process "complete:\n")
|
||||||
(while lines
|
(while lines
|
||||||
|
@ -580,7 +609,7 @@ To automatically do that just add these lines to your .emacs:
|
||||||
(let ((status (process-status utop-process)))
|
(let ((status (process-status utop-process)))
|
||||||
(when (or (eq status 'exit) (eq status 'signal))
|
(when (or (eq status 'exit) (eq status 'signal))
|
||||||
;; The process is terminated
|
;; The process is terminated
|
||||||
(setq utop-state 'done)
|
(set-utop-state 'done)
|
||||||
(let ((exit-code (process-exit-status utop-process)))
|
(let ((exit-code (process-exit-status utop-process)))
|
||||||
(utop-perform
|
(utop-perform
|
||||||
;; Insert a message at the end
|
;; Insert a message at the end
|
||||||
|
@ -635,7 +664,7 @@ To automatically do that just add these lines to your .emacs:
|
||||||
"Start utop."
|
"Start utop."
|
||||||
;; Set the initial state: we are waiting for ocaml to send the
|
;; Set the initial state: we are waiting for ocaml to send the
|
||||||
;; initial prompt
|
;; initial prompt
|
||||||
(setq utop-state 'wait)
|
(set-utop-state 'wait)
|
||||||
|
|
||||||
;; Reset variables
|
;; Reset variables
|
||||||
(setq utop-prompt-min (point-max))
|
(setq utop-prompt-min (point-max))
|
||||||
|
|
Loading…
Reference in New Issue