e5045f303a
* gnu/packages/emacs.scm (emacs-constants): New variable. * gnu/packages/patches/emacs-constants-lisp-like.patch: New patch. * gnu-system.am (dist_patch_DATA): Add it.
81 lines
3.1 KiB
Diff
81 lines
3.1 KiB
Diff
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.
|