Skip to content

Instantly share code, notes, and snippets.

@jpmonettas
Created July 12, 2018 14:11
Show Gist options
  • Save jpmonettas/6b315e11eceb33f687f5d972ace0a60c to your computer and use it in GitHub Desktop.
Save jpmonettas/6b315e11eceb33f687f5d972ace0a60c to your computer and use it in GitHub Desktop.
Quickly define let bindings in Emacs Cider
(defun cider-binding-defit-init ()
(interactive)
(cider-nrepl-request:eval
"(in-ns 'defit)
(defn get-bindings [form]
(cond
(vector? form) (into () form)
(map? form) (into () (:keys form))
:else (list form)))"
(lambda (x) (message "DONE"))))
(defun cider-binding-defit ()
(interactive)
(let ((end (point))
(mid nil)
(beg nil))
(save-excursion
(sp-backward-sexp)
(setq mid (point))
(sp-backward-sexp)
(setq beg (point)))
(lexical-let ((binding (buffer-substring beg mid))
(form (buffer-substring mid end)))
(message "binding %s to %s" binding form)
(cider-interactive-eval (format "(defit/get-bindings (quote %s))" binding)
(lambda (dict)
(let* ((result (nrepl-dict-get dict "value"))
(defs ""))
(when result
(message "All bingindgs %s" result)
(dolist (b (car (read-from-string result)))
(setq defs (concat defs (format "(def %s %s)" b b))))
(cider-interactive-eval (format "(let [%s %s] %s)" binding form defs)))))))))
(define-key cider-mode-map (kbd "C-x C-3") 'cider-binding-defit)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment