feat(emacs/lean-type): implement lean-set-option and lean-eval-cmd
close #55
This commit is contained in:
parent
50063b659b
commit
cc1d44e541
1 changed files with 55 additions and 12 deletions
|
@ -25,7 +25,6 @@
|
||||||
(replace-regexp-in-string "?M_[0-9]+" "_" (lean-info-synth-body-str synth))))
|
(replace-regexp-in-string "?M_[0-9]+" "_" (lean-info-synth-body-str synth))))
|
||||||
(when (search " " synth-str)
|
(when (search " " synth-str)
|
||||||
(setq synth-str (concat "(" synth-str ")")))
|
(setq synth-str (concat "(" synth-str ")")))
|
||||||
(message "synth-str: %s" synth-str)
|
|
||||||
(delete-forward-char 1)
|
(delete-forward-char 1)
|
||||||
(insert synth-str)))))
|
(insert synth-str)))))
|
||||||
|
|
||||||
|
@ -37,35 +36,79 @@
|
||||||
(cond
|
(cond
|
||||||
((and info-record (lean-info-record-nay info-record))
|
((and info-record (lean-info-record-nay info-record))
|
||||||
(lean-server-log "NAY Detected")
|
(lean-server-log "NAY Detected")
|
||||||
(run-with-idle-timer lean-eldoc-nay-retry-time nil 'lean-eldoc-documentation-function))
|
(run-with-idle-timer lean-eldoc-nay-retry-time
|
||||||
|
nil
|
||||||
|
'lean-eldoc-documentation-function)
|
||||||
|
nil)
|
||||||
(info-record
|
(info-record
|
||||||
(setq info-string (lean-info-record-to-string info-record))
|
(setq info-string (lean-info-record-to-string info-record))
|
||||||
(when info-string
|
(when info-string
|
||||||
(message "%s" info-string))))))
|
(message "%s" info-string))))))
|
||||||
|
|
||||||
;; =======================================================
|
;; =======================================================
|
||||||
;; SET/EVAL
|
;; set option
|
||||||
;; =======================================================
|
;; =======================================================
|
||||||
|
|
||||||
|
(defun lean-set-parse-string (str)
|
||||||
|
"Parse the output of eval command."
|
||||||
|
(let ((str-list (split-string str "\n")))
|
||||||
|
;; Drop the first line "-- BEGINSET" and
|
||||||
|
;; the last line "-- ENDSET"
|
||||||
|
(setq str-list
|
||||||
|
(-take (- (length str-list) 2)
|
||||||
|
(-drop 1 str-list)))
|
||||||
|
(string-join str-list "\n")))
|
||||||
|
|
||||||
(defun lean-set-option (option-name option-value)
|
(defun lean-set-option (option-name option-value)
|
||||||
"Get info list from lean server using file-name and line-number"
|
"Set Lean option."
|
||||||
(lean-server-send-cmd (lean-cmd-visit file-name))
|
(interactive "sOption Name: \nsOption Value: ")
|
||||||
(lean-server-send-cmd (lean-cmd-set line-number))
|
(lean-server-send-cmd (lean-cmd-set option-name option-value))
|
||||||
(while (not lean-global-server-message-to-process)
|
(while (not lean-global-server-message-to-process)
|
||||||
(accept-process-output (lean-server-get-process) 0 50 t))
|
(accept-process-output (lean-server-get-process) 0 50 t))
|
||||||
(pcase lean-global-server-message-to-process
|
(pcase lean-global-server-message-to-process
|
||||||
(`(INFO ,pre ,body)
|
(`(SET ,pre ,body)
|
||||||
(lean-server-log "The following pre-message will be thrown away:")
|
(lean-server-log "The following pre-message will be thrown away:")
|
||||||
(lean-server-log "%s" pre)
|
(lean-server-log "%s" pre)
|
||||||
(setq lean-global-server-message-to-process nil)
|
(setq lean-global-server-message-to-process nil)
|
||||||
(lean-info-record-parse body file-name column-number))
|
(lean-server-log "We have the following response from lean-server")
|
||||||
|
(message "%s" (lean-set-parse-string body)))
|
||||||
(`(,type ,pre , body)
|
(`(,type ,pre , body)
|
||||||
(lean-server-log "The following pre-message will be thrown away:")
|
(lean-server-log "The following pre-message will be thrown away:")
|
||||||
(lean-server-log "%s" pre)
|
(lean-server-log "%s" pre)
|
||||||
(lean-server-log "Something other than INFO detected: %S" type)
|
(lean-server-log "Something other than SET detected: %S" type)
|
||||||
;; (lean-server-log "Body: %S" body)
|
(setq lean-global-server-message-to-process nil))))
|
||||||
(setq lean-global-server-message-to-process nil)))
|
|
||||||
)
|
;; =======================================================
|
||||||
|
;; eval
|
||||||
|
;; =======================================================
|
||||||
|
|
||||||
|
(defun lean-eval-parse-string (str)
|
||||||
|
"Parse the output of eval command."
|
||||||
|
(let ((str-list (split-string str "\n")))
|
||||||
|
;; Drop the first line "-- BEGINEVAL" and
|
||||||
|
;; the last line "-- ENDEVAL"
|
||||||
|
(setq str-list
|
||||||
|
(-take (- (length str-list) 2)
|
||||||
|
(-drop 1 str-list)))
|
||||||
|
(string-join str-list "\n")))
|
||||||
|
|
||||||
|
(defun lean-eval-cmd (lean-cmd)
|
||||||
|
"Evaluate lean command."
|
||||||
|
(interactive "sLean CMD: ")
|
||||||
|
(lean-server-send-cmd (lean-cmd-eval lean-cmd))
|
||||||
|
(while (not lean-global-server-message-to-process)
|
||||||
|
(accept-process-output (lean-server-get-process) 0 50 t))
|
||||||
|
(pcase lean-global-server-message-to-process
|
||||||
|
(`(EVAL ,pre ,body)
|
||||||
|
(lean-server-log "The following pre-message will be thrown away:")
|
||||||
|
(lean-server-log "%s" pre)
|
||||||
|
(setq lean-global-server-message-to-process nil)
|
||||||
|
(message "%s" (lean-eval-parse-string body)))
|
||||||
|
(`(,type ,pre , body)
|
||||||
|
(lean-server-log "The following pre-message will be thrown away:")
|
||||||
|
(lean-server-log "%s" pre)
|
||||||
|
(lean-server-log "Something other than EVAL detected: %S" type)
|
||||||
|
(setq lean-global-server-message-to-process nil))))
|
||||||
|
|
||||||
;; =======================================================
|
;; =======================================================
|
||||||
;; Change Handling
|
;; Change Handling
|
||||||
|
|
Loading…
Reference in a new issue