Add Scheme support --- constants/constants.el.orig 2015-12-26 17:44:31.734520833 +0100 +++ constants/constants.el 2015-12-30 17:41:28.402871263 +0100 @@ -684,6 +684,33 @@ (eval-when-compile (defvar ctable)) +(defun constants-is-lisp-like (mode) + (save-match-data + (string-match "\\(lisp\\|scheme\\)" (symbol-name mode)))) + +(defun constants-is-set-like () + (save-excursion + (condition-case nil + (save-match-data + (progn (up-list -1) + (or (looking-at "(set[qf!]?\\>") (looking-at "(define\\>")))) + (error nil)))) ; return value nil means use default + +;;;###autoload +(defun constants-lisp-like-function () + "Check context for constants insertion." + (if (constants-is-set-like) + '(emacs-lisp-mode "%n %v%t; %d %u" "e" "(* %p %v)") + '(emacs-lisp-mode "(%n %v)%t; %d %u" "e" "(* %p %v)"))) + +;;;###autoload +(mapc (lambda (mode-hook) + (add-hook mode-hook + (lambda () + (setq constants-language-function + 'constants-lisp-like-function)))) + '(scheme-mode-hook emacs-lisp-mode-hook lisp-mode-hook)) + ;;;###autoload (defun constants-insert (&optional unit-system names) "Insert one or more natural constant definitions in source code. @@ -826,8 +853,9 @@ (funcall process-func ins)) ;; Here comes the insertion stuff for source code editing modes. ;; First make sure we start a new line - (if (string-match - "\\S-" (buffer-substring (point-at-bol) (point-at-eol))) + (if (and (string-match + "\\S-" (buffer-substring (point-at-bol) (point-at-eol))) + (not (constants-is-lisp-like mode))) ;; non-empty line, insert after this line (progn (end-of-line 1) @@ -841,13 +869,24 @@ (if (string-match "\\(.*\\)%t\\(.*\\)" line) (let ((comment-column 42)) (insert (match-string 1 line)) - (indent-to comment-column) - (insert (match-string 2 line))) + (if (and (constants-is-lisp-like mode) + (or (constants-is-set-like) + (null clist))) + (save-excursion + (progn + (move-to-column comment-column t) + (insert (match-string 2 line)) + ;; insert a newline such that paredit's M-) can mode + ;; the closing parentheses to the next line. + (newline-and-indent))) + (progn + (indent-to comment-column) + (insert (match-string 2 line))))) (insert line))) - (if constants-indent-code - (newline-and-indent) - (newline)))))) - + (unless (and (constants-is-lisp-like mode) (null clist)) + (if constants-indent-code + (newline-and-indent) + (newline))))))) ;;;###autoload (defun constants-get (&optional const message) "Return the value of CONST as defined in the constants package.