Function: cperl-electric-terminator
cperl-electric-terminator is an interactive and byte-compiled function
defined in cperl-mode.el.gz.
Signature
(cperl-electric-terminator ARG)
Documentation
Insert character and correct line's indentation.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cperl-mode.el.gz
(defun cperl-electric-terminator (arg)
"Insert character and correct line's indentation."
(interactive "P")
(let ((end (point))
(auto (and cperl-auto-newline
(or (not (eq last-command-event ?:))
cperl-auto-newline-after-colon)))
insertpos)
(if (and ;;(not arg)
(eolp)
(not (save-excursion
(beginning-of-line)
(skip-chars-forward " \t")
(or
;; Ignore in comment lines
(= (following-char) ?#)
;; Colon is special only after a label
;; So quickly rule out most other uses of colon
;; and do no indentation for them.
(and (eq last-command-event ?:)
(save-excursion
(forward-word-strictly 1)
(skip-chars-forward " \t")
(and (< (point) end)
(progn (goto-char (- end 1))
(not (looking-at ":"))))))
(progn
(beginning-of-defun)
(let ((pps (parse-partial-sexp (point) end)))
(or (nth 3 pps) (nth 4 pps) (nth 5 pps))))))))
(progn
(self-insert-command (prefix-numeric-value arg))
;;(forward-char -1)
(if auto (setq insertpos (point-marker)))
;;(forward-char 1)
(cperl-indent-line)
(if auto
(progn
(newline)
(cperl-indent-line)))
(save-excursion
(if insertpos (goto-char (1- (marker-position insertpos)))
(forward-char -1))
(delete-char 1))))
(if insertpos
(save-excursion
(goto-char insertpos)
(self-insert-command (prefix-numeric-value arg)))
(self-insert-command (prefix-numeric-value arg)))))