feat(emacs/lean-option): show the current value of an option

close #125
This commit is contained in:
Soonho Kong 2014-09-03 08:08:28 -07:00
parent 2ca0a22e2c
commit e802883b03
4 changed files with 33 additions and 26 deletions

View file

@ -1,6 +1,15 @@
;; -*- lexical-binding: t; -*-
;; Copyright (c) 2014 Microsoft Corporation. All rights reserved.
;; Released under Apache 2.0 license as described in the file LICENSE.
;;
;; Author: Soonho Kong
;;
(require 'dash)
(require 'dash-functional)
(cl-defstruct lean-option-record name type value desc)
(defun lean-set-parse-string (str)
"Parse the output of eval command."
(let ((str-list (split-string str "\n")))
@ -11,19 +20,21 @@
(-drop 1 str-list)))
(string-join str-list "\n")))
(defun lean-set-option ()
"Set Lean option."
(interactive)
(lean-get-options)
(let* ((key-list (-map 'car lean-global-option-record-alist))
(defun lean-set-option-cont (option-record-alist)
(let* ((key-list (-map 'car option-record-alist))
(option-name
(completing-read "Option name: "
key-list
nil t "" nil (car key-list)))
(option (cdr (assoc option-name lean-global-option-record-alist)))
(option (cdr (assoc option-name option-record-alist)))
(option-value (lean-option-read option)))
(lean-server-send-cmd (lean-cmd-set option-name option-value) 'message)))
(defun lean-set-option ()
"Set Lean option."
(interactive)
(lean-get-options 'lean-set-option-cont))
(defun lean-option-read-bool (prompt)
(interactive)
(completing-read prompt'(("true" 1) ("false" 2)) nil t "" nil "true"))
@ -92,12 +103,14 @@
(defun lean-option-read (option)
(let* ((option-type-str (lean-option-record-type option))
(option-name (lean-option-record-name option))
(option-desc (lean-option-record-desc option))
(prompt (format "%s [%s] : %s = "
(option-name (lean-option-record-name option))
(option-desc (lean-option-record-desc option))
(option-value (lean-option-record-value option))
(prompt (format "%s [%s] : %s (%s) = "
option-name
option-desc
option-type-str)))
option-type-str
option-value)))
(pcase (lean-option-type option)
(`Bool (lean-option-read-bool prompt))
(`Int (lean-option-read-int prompt))
@ -106,17 +119,16 @@
(`String (lean-option-read-string prompt))
(`SEXP (lean-option-read-sexp prompt)))))
(cl-defstruct lean-option-record name type default-value desc)
(defun lean-option-parse-string (line)
"Parse a line to lean-option-record"
(let* ((str-list (split-string line "|"))
(option-name (substring-no-properties (cl-first str-list) 3))
(option-type (cl-second str-list))
(option-default-value (cl-third str-list))
(option-value (cl-third str-list))
(option-desc (cl-fourth str-list)))
(make-lean-option-record :name option-name
:type option-type
:default-value option-default-value
:value option-value
:desc option-desc)))
(defun lean-options-parse-string (str)
@ -136,13 +148,11 @@
`(,(lean-option-record-name option-record) . ,option-record)))
str-list)))
(defun lean-get-options ()
(defun lean-get-options (cont)
"Get Lean option."
(interactive)
(unless lean-global-option-record-alist
(lean-server-send-cmd (lean-cmd-options)
'(lambda (option-record-alist)
(setq lean-global-option-record-alist
option-record-alist)))))
(lean-server-send-cmd (lean-cmd-options)
(lambda (option-record-alist)
(when cont
(funcall cont option-record-alist)))))
(provide 'lean-option)

View file

@ -103,7 +103,6 @@
(setq lean-global-server-current-file-name nil)
(setq lean-global-server-message-to-process nil)
(setq lean-global-server-last-time-sent nil)
(setq lean-global-option-record-alist nil)
(when (timerp lean-global-retry-timer)
(cancel-timer lean-global-retry-timer))
(setq lean-global-retry-timer nil))
@ -288,6 +287,7 @@ If it's not the same with file-name (default: buffer-file-name), send VISIT cmd.
(lean-server-log "The following pre-message will be thrown away:")
(lean-server-log "%s" pre)
(setq lean-global-server-buffer post)
(message "lean-server-event-handler: %S" type)
(cl-case type
(INFO
(let ((info-record (lean-server-get-info-record-at-pos body)))
@ -302,6 +302,7 @@ If it's not the same with file-name (default: buffer-file-name), send VISIT cmd.
(EVAL
(funcall cont (lean-eval-parse-string body)))
(OPTIONS
(message "handle options")
(funcall cont (lean-options-parse-string body)))
(SHOW
(funcall cont (lean-show-parse-string body)))

View file

@ -1,3 +1,4 @@
;; -*- lexical-binding: t; -*-
;; Copyright (c) 2014 Microsoft Corporation. All rights reserved.
;; Released under Apache 2.0 license as described in the file LICENSE.
;;
@ -14,8 +15,6 @@
(require 'lean-debug)
(require 'flymake)
(setq-local lexical-binding t)
(defun lean-fill-placeholder-cont (info-record)
"Continuation for lean-fill-placeholder"
(let ((synth (and info-record (cl-first (lean-info-record-synth info-record)))))

View file

@ -15,9 +15,6 @@ where TYPE := INFO | SET | EVAL | OPTIONS | SHOW | ERROR,
PRE is a server message comes before the message
BODY is a body of the received message.")
(defvar lean-global-option-record-alist nil
"lean option-record alist")
(defvar lean-global-server-process nil
"lean server process")