javascript: improve REPL

- add send region
- add send and focus functions
- add toggle for livid-mode
- lazy start the http server
This commit is contained in:
syl20bnr 2016-01-21 11:50:51 -05:00
parent c035bca52c
commit ba403b2df1
2 changed files with 67 additions and 23 deletions

View File

@ -184,11 +184,20 @@ You can check more [[https://github.com/mooz/js-doc/][here]]
** REPL (skewer-mode)
| Key Binding | Description |
|-------------+-------------------------------------------------------------------------|
| ~SPC m s s~ | prepares the skewer environment - run this before running REPL commands |
| ~SPC m s i~ | starts/goes to the skewer REPL |
| ~SPC m s b~ | loads the current file in the skewer REPL |
| ~SPC m e e~ | evaluates the last expression |
| ~SPC m e p~ | evaluates and inserts the result of the last expression at point |
| ~SPC m s f~ | evaluates the current function at point |
| Key Binding | Description |
|-------------+------------------------------------------------------------------|
| ~SPC m e e~ | evaluates the last expression |
| ~SPC m e E~ | evaluates and inserts the result of the last expression at point |
| Key Binding | Description |
|-------------+------------------------------------------------------------------------------------|
| ~SPC m s a~ | Toggle live evaluation of whole buffer in REPL on buffer changes |
| ~SPC m s b~ | send current buffer contents to the skewer REPL |
| ~SPC m s B~ | send current buffer contents to the skewer REPL and switch to it in insert state |
| ~SPC m s f~ | send current function at point to the skewer REPL |
| ~SPC m s F~ | send current function at point to the skewer REPL and switch to it in insert state |
| ~SPC m s i~ | starts/switch to the skewer REPL |
| ~SPC m s r~ | send current region to the skewer REPL |
| ~SPC m s R~ | send current region to the skewer REPL and switch to it in insert state |
| ~SPC m s s~ | switch to REPL |

View File

@ -214,24 +214,59 @@
(defun javascript/init-skewer-mode ()
(use-package skewer-mode
:defer t
:init
(progn
(add-hook 'js2-mode-hook 'skewer-mode)
(httpd-start)) ;; this starts the server process - otherwise we need to call httpd-start or run-skewer manually
:init (add-hook 'js2-mode-hook 'skewer-mode)
:config
(progn
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "ss" 'run-skewer)
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "si" 'skewer-repl)
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "sb" 'skewer-load-buffer)
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "ee" 'skewer-eval-last-expression)
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "ep" 'skewer-eval-print-last-expression)
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "sf" 'skewer-eval-defun)
)))
(defun spacemacs/skewer-start-repl ()
"Attach a browser to Emacs and start a skewer REPL."
(interactive)
(run-skewer)
(skewer-repl))
(defun spacemacs/skewer-load-buffer-and-focus ()
"Execute whole buffer in browser and switch to REPL in insert state."
(interactive)
(skewer-load-buffer)
(skewer-repl)
(evil-insert-state))
(defun spacemacs/skewer-eval-defun-and-focus ()
"Execute function at point in browser and switch to REPL in insert state."
(interactive)
(skewer-eval-defun)
(skewer-repl)
(evil-insert-state))
(defun spacemacs/skewer-eval-region (beg end)
"Execute the region as JavaScript code in the attached browser."
(interactive "r")
(skewer-eval (buffer-substring beg end) #'skewer-post-minibuffer))
(defun spacemacs/skewer-eval-region-and-focus (beg end)
"Execute the region in browser and swith to REPL in insert state."
(interactive "r")
(spacemacs/skewer-eval-region beg end)
(skewer-repl)
(evil-insert-state))
(spacemacs/set-leader-keys-for-major-mode 'js2-mode
"ee" 'skewer-eval-last-expression
"eE" 'skewer-eval-print-last-expression
"sb" 'skewer-load-buffer
"sB" 'spacemacs/skewer-load-buffer-and-focus
"si" 'spacemacs/skewer-start-repl
"sf" 'skewer-eval-defun
"sF" 'spacemacs/skewer-eval-defun-and-focus
"sr" 'spacemacs/skewer-eval-region
"sR" 'spacemacs/skewer-eval-region-and-focus
"ss" 'skewer-repl))))
(defun javascript/init-livid-mode ()
(use-package livid-mode
:defer t
:init
(progn
(defalias 'js-live-eval 'livid-mode "Minor mode for automatic evaluation of a JavaScript buffer on every change")
(spacemacs/set-leader-keys-for-major-mode 'js2-mode "st" 'js-live-eval))))
:init (spacemacs|add-toggle javascript-repl-live-evaluation
:status livid-mode
:on (livid-mode)
:off (livid-mode -1)
:documentation "Live evaluation of JS buffer change."
:evil-leader-for-mode (js2-mode . "sa"))))