From: Stefan Monnier Date: Tue, 28 Feb 2017 14:29:06 +0000 (-0500) Subject: * lisp/textmodes/css-mode.el (css-completion-at-point): Auto-insert X-Git-Tag: emacs-26.0.90~696 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fe578ae4ddccbc4736b1e17ec4ecf2317fe03b0e;p=emacs.git * lisp/textmodes/css-mode.el (css-completion-at-point): Auto-insert ": ;" after completing a property. --- diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index cd86db639ab..7a9454f7f3c 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -696,7 +696,8 @@ cannot be completed sensibly: `custom-ident', ;; Even though pseudo-elements should be prefixed by ::, a ;; single colon is accepted for backward compatibility. "\\(?:\\(:" (regexp-opt (append css-pseudo-class-ids - css-pseudo-element-ids) t) + css-pseudo-element-ids) + t) "\\|\\::" (regexp-opt css-pseudo-element-ids t) "\\)" "\\(?:([^)]+)\\)?" (if (not sassy) @@ -965,10 +966,22 @@ pseudo-elements, pseudo-classes, at-rules, and bang-rules." (seq-let (prop-beg prop-end prop-table) (css--complete-property) (seq-let (sel-beg sel-end sel-table) (css--complete-selector) (when (or prop-table sel-table) + ;; FIXME: If both prop-table and sel-table are set but + ;; prop-beg/prop-end is different from sel-beg/sel-end + ;; we have a problem! `(,@(if prop-table (list prop-beg prop-end) (list sel-beg sel-end)) - ,(completion-table-merge prop-table sel-table))))))) + ,(completion-table-merge prop-table sel-table) + :exit-function + ,(lambda (string status) + (and (eq status 'finished) + prop-table + (test-completion string prop-table) + (not (and sel-table + (test-completion string sel-table))) + (progn (insert ": ;") + (forward-char -1)))))))))) ;;;###autoload (define-derived-mode css-mode prog-mode "CSS"