From 5965bcc10b710feec6694570e6fdc4e2f2da3abd Mon Sep 17 00:00:00 2001 From: Soonho Kong Date: Mon, 25 Aug 2014 16:27:33 -0700 Subject: [PATCH] refactor(emacs/lean-server): lean-server-check-current-file takes file-name --- src/emacs/lean-info.el | 11 +++++++++-- src/emacs/lean-server.el | 31 ++++++++++++++++--------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/emacs/lean-info.el b/src/emacs/lean-info.el index 66196ca9e..1ecc36a66 100644 --- a/src/emacs/lean-info.el +++ b/src/emacs/lean-info.el @@ -255,6 +255,8 @@ ;; NAY Information ;; ---------------- +(defun lean-info-nay () '(NAY)) + (defun lean-info-nay-type (nay) (cl-first nay)) (defun lean-info-nay-p (nay) @@ -264,7 +266,7 @@ ((pred listp) (and (lean-info-nay-p (cl-first nay)))))) (defun lean-info-nay-parse (seq) (when (lean-info-nay-p seq) - '(NAY))) + (lean-info-nay))) ;; -- Test (cl-assert (lean-info-nay-p "-- NAY")) @@ -342,6 +344,7 @@ Take out \"BEGININFO\" and \"ENDINFO\" and Use \"ACK\" as a delim." collect result))) (defun lean-info-list-filter (info-list start-column) + "Given a info-list, only return an info-item is NAY or whose start-column is matched with the argument." (--filter (let ((col (lean-info-column it))) (and col (= start-column col))) info-list)) @@ -413,9 +416,13 @@ Take out \"BEGININFO\" and \"ENDINFO\" and Use \"ACK\" as a delim." start-column)))) (defun lean-info-list-parse (str &optional file-name column-number) + "Parse input string and return info-list." (let ((info-list (lean-info-list-parse-string str)) start-column) (cond + ;; If there is NAY, return it. + ((-any? 'lean-info-nay-p info-list) + `(,(lean-info-nay))) ;; When file-name/column-number is specified, try to start-column of id/symbol ((and file-name column-number) (setq start-column (lean-info-list-find-start-column info-list file-name column-number)) @@ -479,7 +486,7 @@ Take out \"BEGININFO\" and \"ENDINFO\" and Use \"ACK\" as a delim." (defun lean-get-info-record (file-name line-number column-number) "Get info list from lean server using file-name and line-number" - (lean-server-send-cmd (lean-cmd-visit file-name)) + (lean-server-check-current-file file-name) (lean-server-send-cmd (lean-cmd-info line-number)) (while (not lean-global-server-message-to-process) (accept-process-output (lean-server-get-process) 0 50 t)) diff --git a/src/emacs/lean-server.el b/src/emacs/lean-server.el index 74acc4a87..e9ee8d0cd 100644 --- a/src/emacs/lean-server.el +++ b/src/emacs/lean-server.el @@ -93,20 +93,21 @@ (setq lean-global-server-current-file-name nil) (setq lean-global-server-message-to-process nil) (setq lean-global-server-process lean-server-process) - (message "lean-server process %S created." lean-server-process) lean-server-process)) (defun lean-server-kill-process () "Kill lean-server process. Return t if killed, nil if nothing to kill" (interactive) (cond - (lean-global-server-process - (message "lean-server-kill-process: %S killed" lean-global-server-process) - (kill-process lean-global-server-process) - (setq lean-global-server-process nil) - t) - (t (message "lean-server-kill-process: no process to kill") - nil))) + (lean-global-server-process + (when (interactive-p) + (message "lean-server-kill-process: %S killed" lean-global-server-process)) + (kill-process lean-global-server-process) + (setq lean-global-server-process nil) + t) + (t (when (interactive-p) + (message "lean-server-kill-process: no process to kill")) + nil))) (defun lean-server-restart-process () "Restart lean-server process." @@ -117,11 +118,11 @@ (defun lean-server-get-process () "Get lean-server process. If needed, create a one." (cond ((not lean-global-server-process) - (message "lean-server-get-process: no process") - (lean-server-create-process)) + (lean-server-create-process)) ((not (process-live-p lean-global-server-process)) - (message "lean-server-get-process: %S is not live, kill it" - lean-global-server-process) + (when (interactive-p) + (message "lean-server-get-process: %S is not live, kill it" + lean-global-server-process)) (lean-server-kill-process)) (t lean-global-server-process))) @@ -139,11 +140,11 @@ Send REPLACE commands to lean-server, reset lean-changed-lines to nil." do (lean-server-send-cmd (lean-cmd-replace n (lean-grab-line n))) finally (setq lean-changed-lines nil))) -(defun lean-server-check-current-file () +(defun lean-server-check-current-file (&optional file-name) "Check lean-global-server-current-file-name. -If it's not the same with (buffer-file-name), send VISIT cmd." - (let ((current-file-name (buffer-file-name))) +If it's not the same with file-name (default: buffer-file-name), send VISIT cmd." + (let ((current-file-name (or file-name (buffer-file-name)))) (unless (string= lean-global-server-current-file-name current-file-name) (lean-server-send-cmd (lean-cmd-visit current-file-name)))))