From 08de732bdb5d3fdff33468ced17b9fa00cf343ec Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Mon, 17 Feb 2020 19:20:18 +0000 Subject: [PATCH] Serene-lambda support has been added --- lib/extensions/serene/init.el | 5 ++- lib/extensions/serene/serene-simple-mode.el | 48 +++++++++------------ 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/lib/extensions/serene/init.el b/lib/extensions/serene/init.el index 12ae656..5bf68fc 100644 --- a/lib/extensions/serene/init.el +++ b/lib/extensions/serene/init.el @@ -14,7 +14,10 @@ (add-hook 'serene-simple-mode-hook #'parinfer-mode)) (add-to-list 'auto-mode-alist - '("\\.srns\\'" . serene-simple-mode))) + '("\\.srns\\'" . serene-simple-mode)) + (add-to-list 'auto-mode-alist + '("\\.srnl\\'" . serene-simple-mode))) + (provide 'extensions/serene/init) diff --git a/lib/extensions/serene/serene-simple-mode.el b/lib/extensions/serene/serene-simple-mode.el index cc625a6..be2b421 100644 --- a/lib/extensions/serene/serene-simple-mode.el +++ b/lib/extensions/serene/serene-simple-mode.el @@ -1,5 +1,13 @@ ;;; serene-init --- The entry point for serene extension ;;; Commentary: +;; +;; In order to connect to Serene's nRepl process, first you have to make +;; that it's running some where (consult Serene's README for learning more +;; about it). Then simply use `serene-nrepl-connect' to make a connection. +;; at this point you can evaluate Serene's expressions by using `serene-eval-expr-at-point' +;; function which evaluates the expression before point end prints out the +;; result in minibuffer. +;; ;;; Code: (defvar serene-simple-mode-map (make-sparse-keymap)) @@ -47,8 +55,8 @@ (define-derived-mode serene-simple-mode scheme-mode "Serene(Simple)" - "Major mode for Serene simple.") - + "Major mode for Serene simple." + (define-key serene-simple-mode-map (kbd "C-x C-e") 'serene-eval-expr-at-point)) (defun serene-simple-add-keywords (face-name keyword-rules) @@ -87,7 +95,7 @@ (left-quote ?‘) expr) (save-excursion - (with-syntax-table emacs-lisp-mode-syntax-table + (with-syntax-table serene-simple-mode-syntax-table ;; If this sexp appears to be enclosed in `...' or ‘...’ ;; then ignore the surrounding quotes. (cond ((eq (preceding-char) ?’) @@ -119,42 +127,26 @@ (looking-back "#s" (- (point) 2)) (forward-char -2)) - ;; Skip over `#N='s. - (when (eq (preceding-char) ?=) - (let (labeled-p) - (save-excursion - (skip-chars-backward "0-9#=") - (setq labeled-p (looking-at "\\(#[0-9]+=\\)+"))) - (when labeled-p - (forward-sexp -1)))) - (save-restriction (if (eq (following-char) left-quote) - ;; vladimir@cs.ualberta.ca 30-Jul-1997: Skip ` in `variable' so - ;; that the value is returned, not the name. (forward-char)) (when (looking-at ",@?") (goto-char (match-end 0))) (narrow-to-region (point-min) opoint) (setq expr (read (current-buffer))) - ;; If it's an (interactive ...) form, it's more useful to show how an - ;; interactive call would use it. - ;; FIXME: Is it really the right place for this? - (when (eq (car-safe expr) 'interactive) - (setq expr - `(call-interactively - (lambda (&rest args) ,expr args)))) expr))))) (defun serene-eval-expr-at-point () "Send the expression at point to the nRepl for evaluation." (interactive) - (let* ((buf (process-buffer serene-nrepl-process)) - (expr (format "%s\n" (replace-regexp-in-string - (regexp-quote "\n") - " " - (prin1-to-string (serene-expr-at-point)) - nil 'literal)))) - (process-send-string serene-nrepl-process expr))) + (if (and serene-nrepl-process (process-live-p serene-nrepl-process)) + (let* ((buf (process-buffer serene-nrepl-process)) + (expr (format "%s\n" (replace-regexp-in-string + (regexp-quote "\n") + " " + (prin1-to-string (serene-expr-at-point)) + nil 'literal)))) + (process-send-string serene-nrepl-process expr)) + (message "Error: You need to connect to Serene's nRepl first."))) (defun serene-nrepl-sentinel (process event)