]> git.eshelyaron.com Git - emacs.git/commitdiff
Tweak electric-layout-mode's API again after Stefan's comments
authorJoão Távora <joaotavora@gmail.com>
Fri, 28 Dec 2018 21:53:12 +0000 (21:53 +0000)
committerJoão Távora <joaotavora@gmail.com>
Fri, 28 Dec 2018 21:53:12 +0000 (21:53 +0000)
* lisp/electric.el (electric-layout-rules): Tweak docstring.
(electric-layout-post-self-insert-function-1): MATCHER is always a
char.  Call function with last-command-event.

* test/lisp/electric-tests.el (electric-pair-mode-newline-between-parens)
(electric-layout-mode-newline-between-parens-without-e-p-m): Don't
pass a name to the ERT test buffer.
(electric-layout-mode-newline-between-parens-without-e-p-m-2): New test.

lisp/electric.el
test/lisp/electric-tests.el

index 27d2bd83d497bef6426f5247b895deef41ffd465..b52efb07c7b7a40df3a8f0b5da6923ddad84a443 100644 (file)
@@ -367,14 +367,12 @@ Each rule has the form (MATCHER . WHERE) where MATCHER examines
 the state of the buffer after a certain character was inserted
 and WHERE specifies where to insert newlines.
 
-MATCHER can be a character CHAR or a boolean function of no
-arguments.  The rule matches if the character just inserted was
-CHAR or if the function return non-nil.
+MATCHER is a character CHAR.  The rule matches if the character
+just inserted was CHAR.
 
-WHERE and can be:
+WHERE can be:
 
-* one of the symbols `before', `after', `around', `after-stay' or
-  nil;
+* one of the symbols `before', `after', `around', `after-stay'.
 
 * a list of the preceding symbols, processed in order of
   appearance to insert multiple newlines;
@@ -388,8 +386,9 @@ inserted.  `after-stay' means insert a newline after POS but stay
 in the same place.
 
 Instead of the (MATCHER . WHERE) form, a rule can also be just a
-function of no arguments.  It should return a value compatible
-with WHERE if the rule matches, or nil if it doesn't match.
+function of a single argument, the character just inserted.  It
+should return a value compatible with WHERE if the rule matches,
+or nil if it doesn't match.
 
 If multiple rules match, only first one is executed.")
 
@@ -406,12 +405,10 @@ If multiple rules match, only first one is executed.")
           (catch 'done
             (while (setq probe (pop rules))
               (cond ((and (consp probe)
-                          (or (eq (car probe) last-command-event)
-                              (and (functionp (car probe))
-                                   (funcall (car probe)))))
+                          (eq (car probe) last-command-event))
                      (throw 'done (cdr probe)))
                     ((functionp probe)
-                     (let ((res (funcall probe)))
+                     (let ((res (funcall probe last-command-event)))
                        (when res (throw 'done res)))))))))
     (when (and rule
                (setq pos (electric--after-char-pos))
index d40d942dab88ede4271e7ca1ef948be442f2350c..d3c2473730da8101396a78f018ba000bbf59f9b6 100644 (file)
@@ -864,7 +864,7 @@ baz\"\""
     (should (equal (buffer-string) "int main ()\n{\n  \n}"))))
 
 (ert-deftest electric-pair-mode-newline-between-parens ()
-  (ert-with-test-buffer (:name "electric-pair-mode-newline-between-parens")
+  (ert-with-test-buffer ()
     (plainer-c-mode)
     (electric-layout-local-mode -1) ;; ensure e-l-m mode is off
     (electric-pair-local-mode 1)
@@ -875,7 +875,7 @@ baz\"\""
     (should (equal (buffer-string) "int main () {\n  \n}"))))
 
 (ert-deftest electric-layout-mode-newline-between-parens-without-e-p-m ()
-  (ert-with-test-buffer (:name "electric-pair-mode-newline-between-parens")
+  (ert-with-test-buffer ()
     (plainer-c-mode)
     (electric-layout-local-mode 1)
     (electric-pair-local-mode -1) ;; ensure e-p-m mode is off
@@ -895,5 +895,26 @@ baz\"\""
       (call-interactively (key-binding `[,last-command-event])))
     (should (equal (buffer-string) "int main () {\n  \n}"))))
 
+(ert-deftest electric-layout-mode-newline-between-parens-without-e-p-m-2 ()
+  (ert-with-test-buffer ()
+    (plainer-c-mode)
+    (electric-layout-local-mode 1)
+    (electric-pair-local-mode -1) ;; ensure e-p-m mode is off
+    (electric-indent-local-mode 1)
+    (setq-local electric-layout-rules
+                '((lambda (char)
+                    (when (and
+                           (eq char ?\n)
+                           (eq (save-excursion
+                                 (skip-chars-backward "\t\s")
+                                 (char-before (1- (point))))
+                               (matching-paren (char-after))))
+                       '(after-stay)))))
+    (insert "int main () {}")
+    (backward-char 1)
+    (let ((last-command-event ?\r))
+      (call-interactively (key-binding `[,last-command-event])))
+    (should (equal (buffer-string) "int main () {\n  \n}"))))
+
 (provide 'electric-tests)
 ;;; electric-tests.el ends here