From 896c165a67479503df63dc7cf86b2c96cf86c102 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Fri, 17 Sep 2010 19:39:38 +0000 Subject: Implement variable `paredit-space-for-delimiter-predicates'. Ignore-this: 45e159465eb88cd994e493dfccc9e495 darcs-hash:20100917193938-00fcc-8567c43f6d3941b49d5f4d848b292fe35af19d19 --- paredit.el | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'paredit.el') 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))) -- cgit v1.2.1