Skip to content

Commit

Permalink
Add skewer-pprint-eval-last-expression.
Browse files Browse the repository at this point in the history
  • Loading branch information
kostafey committed Jul 24, 2017
1 parent 51c4fa2 commit ccd6504
Showing 1 changed file with 37 additions and 16 deletions.
53 changes: 37 additions & 16 deletions skewer-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
;; `skewer-mode'.

;; * C-x C-e -- `skewer-eval-last-expression'
;; * C-c C-p -- `skewer-eval-and-print-last-expression'
;; * C-c C-p -- `skewer-pprint-eval-last-expression'
;; * C-M-x -- `skewer-eval-defun'
;; * C-c C-k -- `skewer-load-buffer'

Expand Down Expand Up @@ -154,7 +154,7 @@
(let ((map (make-sparse-keymap)))
(prog1 map
(define-key map (kbd "C-x C-e") 'skewer-eval-last-expression)
(define-key map (kbd "C-c C-p") 'skewer-eval-and-print-last-expression)
(define-key map (kbd "C-c C-p") 'skewer-pprint-eval-last-expression)
(define-key map (kbd "C-M-x") 'skewer-eval-defun)
(define-key map (kbd "C-c C-k") 'skewer-load-buffer)))
"Keymap for skewer-mode.")
Expand Down Expand Up @@ -192,6 +192,9 @@ callback. The response object is passed to the hook function.")
"Timestamp of the last browser response. Use
`skewer-last-seen-seconds' to access this.")

(defvar skewer-result-buffer "*skewer-result*"
"Buffer name for `skewer-pprint-eval-last-expression' result output.")

(cl-defstruct skewer-client
"A client connection awaiting a response."
proc agent)
Expand Down Expand Up @@ -449,11 +452,7 @@ list: (string start end)."
(end (js2-node-abs-end node)))
(list (buffer-substring-no-properties start end) start end)))))

(defun skewer-eval-and-print-last-expression ()
(interactive)
(skewer-eval-last-expression nil :pprint t))

(cl-defun skewer-eval-last-expression (&optional prefix &key (pprint nil))
(defun skewer-eval-last-expression (&optional prefix)
"Evaluate the JavaScript expression before the point in the
waiting browser. If invoked with a prefix argument, insert the
result into the current buffer."
Expand All @@ -465,15 +464,37 @@ result into the current buffer."
(skewer--save-point #'skewer-eval-last-expression))
(cl-destructuring-bind (string start end) (skewer-get-last-expression)
(skewer-flash-region start end)
(skewer-eval (if pprint
(concat "skewer.log("
;; remove tailing semicolon
(let ((trimmed (trim-string string)))
(if (equal (substring trimmed -1 nil) ";")
(substring trimmed 0 -1)
trimmed)) ");")
string)
#'skewer-post-minibuffer)))))
(skewer-eval string #'skewer-post-minibuffer)))))

(defun skewer-pprint-eval-last-expression ()
(interactive)
(if js2-mode-buffer-dirty-p
(js2-mode-wait-for-parse
(skewer--save-point #'skewer-pprint-eval-last-expression))
(cl-destructuring-bind (string start end) (skewer-get-last-expression)
(skewer-flash-region start end)
(skewer-eval string #'skewer-post-pprint :verbose t)
(display-buffer (get-buffer-create skewer-result-buffer)))))

(defun skewer-json-format ()
"Simple pretty print json buffer."
(interactive)
(beginning-of-buffer)
(replace-string "," ",\n")
(js2-mode)
(mark-whole-buffer)
(indent-for-tab-command)
(js2-reparse))

(defun skewer-post-pprint (result)
(if (not (skewer-success-p result))
(skewer-post-minibuffer result)
(let ((value (cdr (assoc 'value result))))
(with-current-buffer (get-buffer-create skewer-result-buffer)
(erase-buffer)
(insert value)
(insert "\n")
(skewer-json-format)))))

(defun skewer-get-defun ()
"Return the toplevel JavaScript expression around the point as
Expand Down

0 comments on commit ccd6504

Please sign in to comment.