Function: cperl-electric-brace
cperl-electric-brace is an interactive and byte-compiled function
defined in cperl-mode.el.gz.
Signature
(cperl-electric-brace ARG &optional ONLY-BEFORE)
Documentation
Insert character ARG and correct line's indentation.
If ONLY-BEFORE and cperl-auto-newline, will insert newline before the
place (even in empty line), but not after. If after ")" and the inserted
char is "{", insert extra newline before only if
cperl-extra-newline-before-brace.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cperl-mode.el.gz
(defun cperl-electric-brace (arg &optional only-before)
"Insert character ARG and correct line's indentation.
If ONLY-BEFORE and `cperl-auto-newline', will insert newline before the
place (even in empty line), but not after. If after \")\" and the inserted
char is \"{\", insert extra newline before only if
`cperl-extra-newline-before-brace'."
(interactive "P")
(let (insertpos
(other-end (if (and cperl-electric-parens-mark
(region-active-p)
(< (mark) (point)))
(mark)
nil)))
(if (and other-end
(not cperl-brace-recursing)
(cperl-val 'cperl-electric-parens)
(>= (save-excursion (cperl-to-comment-or-eol) (point)) (point)))
;; Need to insert a matching pair
(progn
(save-excursion
(setq insertpos (point-marker))
(goto-char other-end)
(setq last-command-event ?\{)
(cperl-electric-lbrace arg insertpos))
(forward-char 1))
;; Check whether we close something "usual" with `}'
(if (and (eq last-command-event ?\})
(not
(condition-case nil
(save-excursion
(up-list (- (prefix-numeric-value arg)))
;;(cperl-after-block-p (point-min))
(or (cperl-after-expr-p nil "{;)")
;; after sub, else, continue
(cperl-after-block-p nil 'pre)))
(error nil))))
;; Just insert the guy
(self-insert-command (prefix-numeric-value arg))
(if (and (not arg) ; No args, end (of empty line or auto)
(eolp)
(or (and (null only-before)
(save-excursion
(skip-chars-backward " \t")
(bolp)))
(and (eq last-command-event ?\{) ; Do not insert newline
;; if after ")" and `cperl-extra-newline-before-brace'
;; is nil, do not insert extra newline.
(not cperl-extra-newline-before-brace)
(save-excursion
(skip-chars-backward " \t")
(eq (preceding-char) ?\))))
(if cperl-auto-newline
(progn (cperl-indent-line) (newline) t) nil)))
(progn
(self-insert-command (prefix-numeric-value arg))
(cperl-indent-line)
(if cperl-auto-newline
(setq insertpos (1- (point))))
(if (and cperl-auto-newline (null only-before))
(progn
(newline)
(cperl-indent-line)))
(save-excursion
(if insertpos (progn (goto-char insertpos)
(search-forward (make-string
1 last-command-event))
(setq insertpos (1- (point)))))
(delete-char -1))))
(if insertpos
(save-excursion
(goto-char insertpos)
(self-insert-command (prefix-numeric-value arg)))
(self-insert-command (prefix-numeric-value arg)))))))