summaryrefslogtreecommitdiff
path: root/paredit.el
diff options
context:
space:
mode:
Diffstat (limited to 'paredit.el')
-rw-r--r--paredit.el23
1 files changed, 22 insertions, 1 deletions
diff --git a/paredit.el b/paredit.el
index 23a9282..c1f3936 100644
--- a/paredit.el
+++ b/paredit.el
@@ -756,6 +756,22 @@ If such a comment exists, delete the comment (including all leading
(eq (nth 5 beginning-state) ; 5. t if following char
(nth 5 end-state))))))) ; quote
+(defvar paredit-space-for-delimiter-predicates nil
+ "List of predicates for whether to put space by delimiter at point.
+Each predicate is a function that is is applied to two arguments, ENDP
+ and DELIMITER, and that returns a boolean saying whether to put a
+ space next to the delimiter -- before the delimiter if ENDP is false,
+ after the delimiter if ENDP is true.
+If any predicate returns false, no space is inserted: every predicate
+ has veto power.
+Each predicate may assume that the point is not at the beginning of the
+ buffer, if ENDP is false, or at the end of the buffer, if ENDP is
+ true; and that the point is not preceded, if ENDP is false, or
+ followed, if ENDP is true, by a word or symbol constituent, a quote,
+ or the delimiter matching DELIMITER.
+Each predicate should examine only text before the point, if ENDP is
+ false, or only text after the point, if ENDP is true.")
+
(defun paredit-space-for-delimiter-p (endp delimiter)
;; If at the buffer limit, don't insert a space. If there is a word,
;; symbol, other quote, or non-matching parenthesis delimiter (i.e. a
@@ -768,7 +784,12 @@ If such a comment exists, delete the comment (including all leading
(and matching (char-syntax matching)))
(and (not endp)
(eq ?\" (char-syntax delimiter))
- ?\) )))))
+ ?\) )))
+ (catch 'exit
+ (dolist (predicate paredit-space-for-delimiter-predicates)
+ (if (not (funcall predicate endp delimiter))
+ (throw 'exit nil)))
+ t)))
(defun paredit-move-past-close-and-reindent (close)
(let ((open (paredit-missing-close)))