summary refs log tree commit diff
path: root/gnu/packages/patches/emacs-constants-lisp-like.patch
blob: 5ec37f3adfa821cdde738ceb14c905cb8fb19f65 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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.