feat(emacs/lean-mode): add lean-exec-at-pos and lean-define-key-binding
Example Usage: add the following in your emacs configuration (add-hook 'lean-mode-hook '(lambda () (lean-define-key-binding "\C-c\C-g" '(lean-exec-at-pos "lean-goal" "*Lean Goal*" "--goal")))) close #499
This commit is contained in:
parent
d950338980
commit
69d1cfdd52
1 changed files with 52 additions and 0 deletions
|
@ -53,6 +53,55 @@
|
||||||
(or arg "")
|
(or arg "")
|
||||||
target-file-name))))
|
target-file-name))))
|
||||||
|
|
||||||
|
(defun lean-exec-at-pos (process-name process-buffer-name &rest options)
|
||||||
|
"Execute Lean by providing current position with optional
|
||||||
|
agruments. The output goes to 'process-buffer-name' buffer, which
|
||||||
|
will be flushed everytime it's executed."
|
||||||
|
;; Kill process-name if exists
|
||||||
|
(let ((current-process (get-process process-name)))
|
||||||
|
(when current-process
|
||||||
|
(kill-process)))
|
||||||
|
;; Flush process-buffer
|
||||||
|
(let ((process-buffer (get-buffer process-buffer-name)))
|
||||||
|
(when process-buffer
|
||||||
|
(with-current-buffer process-buffer
|
||||||
|
(erase-buffer))))
|
||||||
|
;; Ask to save current buffer
|
||||||
|
(when (buffer-file-name)
|
||||||
|
(save-some-buffers nil `(lambda () (s-equals? (buffer-file-name) ,(buffer-file-name)))))
|
||||||
|
;; Start process
|
||||||
|
(let* ((target-file-name
|
||||||
|
(or
|
||||||
|
;; Only use file-name if the current buffer is not modified
|
||||||
|
(and (not (buffer-modified-p)) (buffer-file-name))
|
||||||
|
(flymake-init-create-temp-buffer-copy 'lean-create-temp-in-system-tempdir)))
|
||||||
|
(cache-file-name
|
||||||
|
(s-concat (f-no-ext target-file-name)
|
||||||
|
".clean"))
|
||||||
|
(cache-option
|
||||||
|
;; Cache is only used when we use a non-temporary file
|
||||||
|
(if (s-equals? (buffer-file-name) target-file-name)
|
||||||
|
`("--cache" ,cache-file-name)
|
||||||
|
'()))
|
||||||
|
(lean-mode-option
|
||||||
|
(pcase (lean-choose-minor-mode-based-on-extension)
|
||||||
|
(`standard "--lean")
|
||||||
|
(`hott "--hlean")))
|
||||||
|
(process-args (append `(,process-name
|
||||||
|
,process-buffer-name
|
||||||
|
,(lean-get-executable lean-executable-name)
|
||||||
|
,lean-mode-option
|
||||||
|
"--line"
|
||||||
|
,(int-to-string (line-number-at-pos))
|
||||||
|
"--col"
|
||||||
|
,(int-to-string (current-column)))
|
||||||
|
options
|
||||||
|
cache-option
|
||||||
|
`(,target-file-name)))
|
||||||
|
(p (apply 'start-process process-args)))
|
||||||
|
(set-process-coding-system p 'utf-8 'utf-8)
|
||||||
|
(set-process-query-on-exit-flag p nil)))
|
||||||
|
|
||||||
(defun lean-std-exe ()
|
(defun lean-std-exe ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(lean-execute))
|
(lean-execute))
|
||||||
|
@ -95,6 +144,9 @@
|
||||||
(local-set-key "\M-." 'lean-find-tag)
|
(local-set-key "\M-." 'lean-find-tag)
|
||||||
(local-set-key (kbd "TAB") 'lean-tab-indent-or-complete))
|
(local-set-key (kbd "TAB") 'lean-tab-indent-or-complete))
|
||||||
|
|
||||||
|
(defun lean-define-key-binding (key cmd)
|
||||||
|
(local-set-key key `(lambda () (interactive) ,cmd)))
|
||||||
|
|
||||||
(define-abbrev-table 'lean-abbrev-table
|
(define-abbrev-table 'lean-abbrev-table
|
||||||
'())
|
'())
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue